既存の行を置き換えてマージ操作を実現する
手順で説明しているマージオペレーションを実行するときは、一時的なステージングテーブルの作成と削除のステップを除き、すべてのステップを 1 つのトランザクションにまとめます。いずれかのステップが失敗した場合でも、トランザクションはロールバックされます。トランザクションを 1 つにすると、ほかにもコミットの回数が減るため、時間とリソースの節約になります。
既存の行を置き換えてマージ操作を実現するには、以下の手順を実行します。
-
次の疑似コードに示すように、ステージングテーブルを作成し、マージの対象となるデータを移します。
CREATE temp table stage (like target); INSERT INTO stage SELECT * FROM source WHERE source.filter = 'filter_expression';
-
MERGE を使用してステージングテーブルとの内部結合を実行し、ステージングテーブルと一致するターゲットテーブルの行を更新します。次に、ステージングテーブルと一致しない残りのすべての行をターゲットテーブルに挿入します。
更新と挿入の操作は 1 つの MERGE コマンドで実行することをお勧めします。
MERGE INTO target USING stage [optional alias] on (target.primary_key = stage.primary_key) WHEN MATCHED THEN UPDATE SET col_name1 = stage.col_name1 , col_name2= stage.col_name2, col_name3 = {expr} WHEN NOT MATCHED THEN INSERT (col_name1 , col_name2, col_name3) VALUES (stage.col_name1, stage.col_name2, {expr});
-
ステージングテーブルを削除 (Drop) します。
DROP TABLE stage;