適用対象:
Databricks SQL
Databricks Runtime 18.0 以降
SQL ステートメント、フロー制御ステートメント、ローカル変数宣言、および例外ハンドラーのシーケンスを含めることができる SQL スクリプト ブロックを実装します。
ATOMICとしてマークされている場合、ブロックはトランザクション 単位として実行され、すべてのステートメントが一緒に成功するか、一緒に失敗します。
構文
BEGIN ATOMIC
statement1;
statement2;
...
END;
パラメーター
なし。
ATOMIC キーワードは、複合ステートメントの動作を変更します。
説明
複合ステートメントをアトミック トランザクション ブロックとしてマークします。 ブロック内のすべてのステートメントは、単一のトランザクション 単位として実行されます。すべてのステートメントが一緒に成功するか、ステートメントが失敗した場合にすべての変更がロールバックされます。 Azure Databricks は、ブロックが正常に完了したときに変更を自動的にコミットするか、ステートメントが失敗した場合にすべての変更をロールバックします。
BEGIN ATOMIC ... END ブロックは、他のアトミック ブロック内に入れ子にすることが可能です。 内部ブロックは外側のトランザクションにフラット化されます。すべてのステートメントは、1 つの大きなトランザクションの一部として実行されます。 これは入れ子になったトランザクションではありません。 アトミック ブロックに非アトミック BEGIN ... END ブロックを含めることはできません。
これは非対話型トランザクションです。 COMMIT を実行したり、手動で ROLLBACK したりする必要はありません。
必要条件
- 複数ステートメントで書き込まれるすべてのテーブルでは、複数テーブル トランザクションで次の処理を行う必要があります。
- Unity カタログのマネージド テーブル (Delta または Iceberg) にする
- カタログ管理コミットを有効にする
- SQL ウェアハウス、 サーバーレス コンピューティング、または Databricks Runtime 18.0 以降を実行しているクラスターを使用します。
- トランザクション内で変更されたオブジェクトに対する適切なアクセス許可が必要です。 権限は、各ステートメントの実行時にチェックされます。
例示
次の例では、 BEGIN ATOMIC ... END;を使用する一般的なトランザクション パターンを示します。
複数のテーブル間で更新を調整する
BEGIN ATOMIC
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO audit_log VALUES (1, 2, 100, current_timestamp());
END;
コミットする前にデータを検証する
BEGIN ATOMIC
INSERT INTO staging_customers
SELECT * FROM external_source WHERE ingest_date = current_date();
IF (SELECT COUNT(*) FROM staging_customers WHERE email NOT LIKE '%@%') > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Invalid email addresses found';
END IF;
MERGE INTO customers AS target
USING staging_customers AS source
ON target.customer_id = source.customer_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
END;
関連資料
- BEGIN TRANSACTION: 手動コミット/ロールバック制御を使用して対話型トランザクションを開始する
- COMMIT: 対話型トランザクションをコミットする
- ROLLBACK: 対話型トランザクションをロールバックする
-
複合ステートメント:
BEGIN ... ENDキーワードを指定せずにブロックをATOMICする - トランザクション: トランザクション サポートの概要
- トランザクション モード: 非対話型トランザクションと対話型トランザクションの詳細なパターンと例