

 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="t_updating-inserting-using-staging-tables-"></a>

MERGE コマンドを使用すると、既存のテーブルに新しいデータを効率的に追加できます。マージ操作を実行するには、ステージングテーブルを作成し、このセクションで説明している方法のいずれかを使用して、ステージングテーブルからターゲットテーブルを更新します。MERGE コマンドの詳細については、「[MERGE](r_MERGE.md)」を参照してください。

[マージの例](merge-examples.md) は、Amazon Redshift 用のサンプルデータセット (TICKIT データセット) を使用します。前提条件として、「[一般的なデータベースタスクの開始方法](https://docs.aws.amazon.com/redshift/latest/gsg/database-tasks.html)」に記載されている手順に従って、TICKIT テーブルとデータを設定できます。サンプルデータセットの詳細については、「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。

## マージ方法 1: 既存の行を置き換える
<a name="merge-method-replace-existing-rows"></a>

ターゲットテーブルのすべての列を上書きする場合、マージを実行する最速の方法は、既存の行を置き換えることです。これは、内部結合を使用して更新される行を削除するため、ターゲットテーブルを 1 回だけスキャンします。行は削除されると、1 回の挿入オペレーションによってステージングテーブルの新しい行と置き換えられます。

この方法は、以下の条件のすべてに該当する場合に使用してください。
+ ターゲットテーブルとステージングテーブルに同じ列が含まれる。
+ ターゲットテーブルの列のデータをすべて、ステージングテーブルの列で置き換えることを予定している。
+ マージでステージングテーブルの行をすべて使用する。

ここに挙げた条件のなかに当てはまらないものがあった場合は、次のセクションで説明する「マージ方法 2: MERGE を使用せずに列リストを指定する」を使用します。

ステージングテーブルの行すべてを使用するわけではない場合には、DELETE ステートメントおよび INSERT ステートメントに WHERE 句を使用して、変更がない行を除外します。ただし、マージでステージングテーブルの行の大部分を使用しない場合には、このセクションで後ほど説明するように UPDATE と INSERT を別個に実行する方法を推奨しています。

## マージ方法 2: MERGE を使用せずに列リストを指定する
<a name="merge-method-specify-column-list"></a>

行全体を上書きするのではなく、テーブルの特定の列を更新する場合には、この方法を使用します。この方法では、更新のステップを追加する必要があり、MERGE コマンドを使用しないため、前の方法よりも時間がかかります。このため、以下の条件のいずれかに該当する場合にこの方法を使用してください。
+ テーブルの列すべてを更新するわけではない。
+ 更新でステージングテーブルの行のほとんどを使用しない。

**Topics**
+ [マージ方法 1: 既存の行を置き換える](#merge-method-replace-existing-rows)
+ [マージ方法 2: MERGE を使用せずに列リストを指定する](#merge-method-specify-column-list)
+ [一時的に使用するステージングテーブルを作成する](merge-create-staging-table.md)
+ [既存の行を置き換えてマージ操作を実現する](merge-replacing-existing-rows.md)
+ [MERGE コマンドを使用せずに列リストを指定してマージ操作を実行する](merge-specify-a-column-list.md)
+ [マージの例](merge-examples.md)