

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# 既存の行を置き換えてマージ操作を実現する
<a name="merge-replacing-existing-rows"></a>

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

**既存の行を置き換えてマージ操作を実現するには、以下の手順を実行します。**

1. 次の疑似コードに示すように、ステージングテーブルを作成し、マージの対象となるデータを移します。

   ```
   CREATE temp table stage (like target); 
   
   INSERT INTO stage 
   SELECT * FROM source 
   WHERE source.filter = 'filter_expression';
   ```

1.  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});
   ```

1. ステージングテーブルを削除 (Drop) します。

   ```
   DROP TABLE stage;
   ```