このトピックでは、MaxComputeの同時ジョブの原子性、一貫性、分離、および耐久性 (ACID) セマンティクスと、トランザクションテーブルのACIDセマンティクスについて説明します。
用語
操作: MaxComputeで送信された単一のジョブ。
データオブジェクト: パーティション分割されていないテーブルやパーティションなど、データを格納するオブジェクト。
INTOジョブ: INSERT INTOやDYNAMIC INSERT INTOなどのINTOキーワードを含むSQLジョブ。
OVERWRITEジョブ: INSERT OVERWRITEまたはDYNAMIC INSERT OVERWRITEなどのOVERWRITEキーワードを含むSQLジョブ。
Tunnelを使用したデータアップロード: INTOまたはOVERWRITEジョブ。
ACIDセマンティクスの説明
原子性: 操作が完全に完了するか、まったく実行されません。 すなわち、操作は部分的には行われない。
整合性: 操作が実行されると、データオブジェクトの整合性が維持されます。
分離: 操作は、他の同時操作とは無関係に実行できます。
耐久性: 操作が完了した後、変更されたデータは永続的に有効であり、システム障害が発生しても失われません。
MaxComputeでの同時書き込みジョブのACIDセマンティクス
原子性
複数のジョブが競合する場合、MaxComputeは1つのジョブのみが成功することを保証します。
単一のテーブルまたはパーティションに対するCREATE、OVERWRITE、およびDROP操作の原子性を保証できます。
MULTI-INSERTなどのクロステーブル操作の原子性は保証できません。
極端な場合、次の操作はアトミックではない場合があります。
10,000を超えるパーティションで実行される
DYNAMIC INSERT OVERWRITE
操作。INTO操作。 トランザクションのロールバック中にデータクレンジングが失敗するため、INTO操作のアトミック性を確保できません。 ただし、データクレンジングの失敗によって元のデータが失われることはありません。
一貫性
OVERWRITEジョブの一貫性を確保できます。
INTOジョブが競合により失敗した場合、失敗したジョブからのデータが残る可能性があります。
分離
INTO以外の操作の場合、MaxComputeは読み取り操作が送信されるようにします。
INTO操作の場合、一部の読み取り操作は送信されない場合があります。
耐久性
MaxComputeはデータの耐久性を保証します。
トランザクションテーブルのACIDセマンティクス
MaxComputeは、同時書き込みジョブのACIDセマンティクスに加えて、トランザクションテーブルの次のACIDセマンティクスをサポートしています。
INTO操作の場合、MaxComputeは読み取り操作が送信されるようにします。 INTOジョブが競合により失敗した場合、失敗したジョブのデータは残りません。
パーティション分割されていないテーブルまたはパーティションに対するUPDATE、DELETE、およびsmall file MERGE操作のアトミック性を保証できます。
たとえば、2つのUPDATE操作がパーティションに対して同時に実行された場合、1つのUPDATE操作のみが成功します。 以下のケースは存在しない: 1. UPDATE操作は部分的に実行される。 2. 両方のUPDATE操作は成功します。
同時操作の競合
ジョブが同じ宛先テーブルで同時に実行されると、競合が発生する可能性があります。 競合が発生した場合、先に終了したジョブは成功し、後に終了したジョブは競合により失敗する可能性があります。
次の表は、パーティション分割されていないテーブルまたはパーティションに対して同時に送信されたジョブの結果を示しています。
ジョブタイプ | 後で終了するINSERT OVERWRITEまたはTRUNCATEジョブ | 後で終了するINSERT INTOジョブ | 後で終了するUPDATEまたはDELETEジョブ | 後で終了するSmall file MERGEジョブ |
以前に終了するINSERT OVERWRITEまたはTRUNCATEジョブ |
|
|
|
|
早く終了するジョブにINSERT INTO |
|
|
|
|
以前に終了したUPDATEまたはDELETEジョブ |
|
|
|
|
以前に終了するSmall file MERGEジョブ |
|
|
|
|
結論として、競合するジョブは次のルールに基づいて成功するか、エラーを報告します。
INSERT操作では、データ変更時の競合によるエラーは報告されません。
UPDATE、DELETE、およびsmall file MERGE操作では、ターゲットのパーティション分割されていないテーブルまたはパーティションのデータが変更されると、競合が原因でエラーが報告されます。
極端なケースでは、メタデータの更新中に複数のジョブが同時に実行されると、メタデータの変更による競合により、ジョブがエラーを報告することがあります。