すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:ACIDセマンティクス

最終更新日:Nov 20, 2024

このトピックでは、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 OVERWRITEまたはTRUNCATEジョブのデータは、前に終了するINSERT OVERWRITEまたはTRUNCATEジョブのデータを上書きします。

  • 両方のジョブは成功します。

  • 後で終了するINSERT INTOジョブは、以前に終了したINSERT OVERWRITEまたはTRUNCATEジョブからのデータにそのデータを追加します。

  • 後で終了するUPDATEまたはDELETEジョブはエラーを報告します。

  • 以前に終了したINSERT OVERWRITEまたはTRUNCATEジョブは、後で終了するUPDATEまたはDELETEジョブが実行されるパーティションのないテーブルまたはパーティションのデータを変更します。

  • 後で終了するSmall file MERGEジョブはエラーを報告します。

  • 以前に終了したINSERT OVERWRITEまたはTRUNCATEジョブは、後で終了するSmall file MERGEジョブが実行される非パーティション化テーブルまたはパーティションのデータを変更します。

早く終了するジョブにINSERT INTO

  • 両方のジョブは成功します。

  • 後で終了するINSERT OVERWRITEまたはTRUNCATEジョブのデータは、前に終了するINSERT INTOジョブのデータを上書きします。

  • 両方のジョブは成功します。

  • 後で終了するINSERT INTOジョブは、以前に終了するINSERT INTOジョブのデータにそのデータを追加します。

  • 後で終了するUPDATEまたはDELETEジョブはエラーを報告します。

  • 以前に終了したINSERT INTOジョブは、後で終了するUPDATEジョブまたはDELETEジョブが実行されるパーティション以外のテーブルまたはパーティションのデータを変更します。

  • 後で終了するSmall file MERGEジョブはエラーを報告します。

  • 以前に終了したINSERT INTOジョブは、後で終了するSmall file MERGEジョブが実行される非パーティションまたはパーティションのデータを変更します。

以前に終了したUPDATEまたはDELETEジョブ

  • 両方のジョブは成功します。

  • 後で終了するINSERT OVERWRITEまたはTRUNCATEジョブのデータは、前に終了するUPDATEまたはDELETEジョブのデータを上書きします。

  • 両方のジョブは成功します。

  • 後で終了するINSERT INTOジョブは、以前に終了したUPDATEジョブまたはDELETEジョブのデータにそのデータを追加します。

  • 後で終了するUPDATEまたはDELETEジョブはエラーを報告します。

  • 以前に終了したUPDATEジョブまたはDELETEジョブは、後で終了するUPDATEジョブまたはDELETEジョブが実行される非パーティションテーブルまたはパーティションのデータを変更します。

  • 後で終了するSmall file MERGEジョブはエラーを報告します。

  • 以前に終了したINSERT INTOジョブは、後で終了するSmall file MERGEジョブが実行される非パーティションまたはパーティションのデータを変更します。

以前に終了するSmall file MERGEジョブ

  • 両方のジョブは成功します。

  • 後で終了するINSERT OVERWRITEまたはTRUNCATEジョブからのデータは、前に終了するSmall file MERGEジョブからのデータを上書きします。

  • 両方のジョブは成功します。

  • 後で終了するINSERT INTOジョブは、以前に終了したSmall file MERGEジョブからのデータにそのデータを追加します。

  • 後で終了するUPDATEまたはDELETEジョブはエラーを報告します。

  • 以前に終了したSmall file MERGEジョブは、後で終了するUPDATEジョブまたはDELETEジョブが実行されるパーティション以外のテーブルまたはパーティションのデータを変更します。

  • 後で終了するSmall file MERGEジョブはエラーを報告します。

  • 先に終了したSmall file MERGEジョブは、後で終了するSmall file MERGEジョブが実行される非パーティションまたはパーティションのデータを変更します。

結論として、競合するジョブは次のルールに基づいて成功するか、エラーを報告します。

  • INSERT操作では、データ変更時の競合によるエラーは報告されません。

  • UPDATE、DELETE、およびsmall file MERGE操作では、ターゲットのパーティション分割されていないテーブルまたはパーティションのデータが変更されると、競合が原因でエラーが報告されます。

説明

極端なケースでは、メタデータの更新中に複数のジョブが同時に実行されると、メタデータの変更による競合により、ジョブがエラーを報告することがあります。