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

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

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

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

    create temp table stage (like target); insert into stage select * from source where source.filter = 'filter_expression';
  2. ステージングテーブルで内部結合を使用して、ターゲットテーブルから更新の対象となる行を削除します。

    問題が発生した場合に全体をロールバックできるよう、削除操作と挿入操作を単一のトランザクションにまとめます。

    begin transaction; delete from target using stage where target.primarykey = stage.primarykey;
  3. ステージングテーブルからすべての行を挿入します。

    insert into target select * from stage; end transaction;
  4. ステージングテーブルを削除 (Drop) します。

    drop table stage;