メインコンテンツへジャンプ

マルチステートメントトランザクション

Databricks 無料トライアル

Databricks Delta Talbes のマルチステートメントトランザクション

Databricks は、基礎となるテーブルがDatabricks Delta Talbes である場合、マルチステートメントトランザクションをサポートします。これは、トランザクション内のすべてのステートメントがアトミック(全て成功する/全て失敗する)であることを意味します。

2 つのスレッド/ユーザーのタイムラインの例を考えてみます。スレッド 1 はUPDATE スレッドであり、スレッド 2 はリーダー/クエリスレッドです。

  • thread 1 - START TRANSACTION ON t1
  • thread 1 - INSERT INTO t1 SELECT ... FROM t2 where id = 42 /* add some rows*/
  • thread 2 - SELECT a FROM t1 WHERE id = 42
  • thread 1 - UPDATE t1 SET a = val2 WHERE id = 42 /*update some rows */
  • thread 1 - COMMIT

この例では、テーブル t1 に新しい行を追加し、テーブル t1 の既存の行を更新することが目的です。目的は、これを単一の論理トランザクションにすることです。Databricks Delta はマルチステートメントのトランザクションをサポートしているため、スレッド 2 では、新しく挿入された行は表示されず、START TRANSACTION コマンドが発行される前に存在していたテーブルのビューが表示されます。これは、INSERT と UPDATE の両方が独立していてもアトミックな操作として扱われるため、マルチステートメントのトランザクションを使用しないと実現できませんでした。マルチステートメントトランザクションでは、INSERTと UPDATE の両方が 1 つのアトミック操作(どちらも成功する/どちらも失敗する)として扱われ、他のユーザーが「部分トランザクション」を見ることはできません。

    用語集に戻る