Snowflakeでトランザクション管理ってできるんだっけ?という疑問から調査しました。
トランザクションの開始
BEGIN;
BEGIN TRANSACTION;
BEGIN WORK;
START TRANSACTION;
この4つはすべて同じ意味。
トランザクションの終了
コミット
COMMIT;
COMMIT WORK;
この2つは同じ意味。
ロールバック
ROLLBACK;
ROLLBACK WORK;
この2つは同じ意味。
実験
実験してみます。
BEGIN;
SHOW TRANSACTIONS;
SELECT CURRENT_TRANSACTION();
COMMIT WORK;
SHOW TRANSACTIONS;
SELECT CURRENT_TRANSACTION();
SELECT LAST_TRANSACTION();
上記を実行してみます。
-
COMMIT WORK;
COMMITします。(何もしてないのでROLLBACKでもいいのですがCOMMITを採用。一応オプションのWORKもつけてみた。) -
SELECT CURRENT_TRANSACTION();
同様にCURRENT_TRANSACTION()の値は取れずnullでした。
直近のトランザクションIDは取得できました。
追加
DESC TRANSACTION 1740360208952000000;
LAST_TRANSACTION()で取得したトランザクションIDを使ってDESCコマンドも追加実行しました。
BEGIN直後のSHOW TRANSACTIONS;と同じ結果が取得できました。
まとめ
Snowflakeでトランザクションって意識してなかったけどあるんですね。
ストアドなどで順次処理を組んでる場合には使えることがわかりました。