既存の行を置き換えてマージ操作を実現する - Amazon Redshift

既存の行を置き換えてマージ操作を実現する

手順で説明しているマージオペレーションを実行するときは、一時的なステージングテーブルの作成と削除のステップを除き、すべてのステップを 1 つのトランザクションにまとめます。いずれかのステップが失敗した場合でも、トランザクションはロールバックされます。トランザクションを 1 つにすると、ほかにもコミットの回数が減るため、時間とリソースの節約になります。

既存の行を置き換えてマージ操作を実現するには、以下の手順を実行します。
  1. 次の疑似コードに示すように、ステージングテーブルを作成し、マージの対象となるデータを移します。

    create temp table stage (like target); insert into stage select * from source where source.filter = 'filter_expression';
  2. 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});
  3. ステージングテーブルを削除 (Drop) します。

    drop table stage;