重複が発生する可能性があります。増分更新のキーカラムの一致判定はソースデータ内の重複をチェックしないためです。挙動はモードによって異なります。
- 上書き:出力先の一致行を DELETE した後、ソースの全行を INSERT するため、ソースに重複行があればそのまま出力先に入ります
- スキップ:出力先に該当キーが存在しない場合に限り、ソースの重複行がすべて INSERT されます。出力先にキーが存在する場合は重複行も含めてスキップされます
検証例
キーカラムを order_id + order_date に設定した状態で、ソースに A001, 2024-01-01 が 2 行ある場合にジョブを実行しました。
ソースデータ:
| order_id | order_date | amount |
|---|---|---|
| A001 | 2024-01-01 | 9999 |
| A001 | 2024-01-01 | 1111 |
| A002 | 2024-01-01 | 2000 |
上書きの場合
実行前の出力先テーブル:
| order_id | order_date | amount |
|---|---|---|
| A001 | 2024-01-01 | 9999 |
| A002 | 2024-01-01 | 2000 |
実行後の出力先テーブル:
| order_id | order_date | amount |
|---|---|---|
| A001 | 2024-01-01 | 9999 |
| A001 | 2024-01-01 | 1111 |
| A002 | 2024-01-01 | 2000 |
既存の A001, 2024-01-01 の 1 行が DELETE され、ソース側の 2 行がそのまま INSERT されました。
スキップの場合
スキップモードは出力先に該当キーが存在しない行のみ INSERT します。出力先にキーが存在する場合はソースに重複があっても両方スキップされ、出力先は変わりません。一方、出力先にキーが存在しない場合はソースの重複行がすべて INSERT されます。
実行前の出力先テーブル(A001 なし):
| order_id | order_date | amount |
|---|---|---|
| A002 | 2024-01-01 | 2000 |
実行後の出力先テーブル:
| order_id | order_date | amount |
|---|---|---|
| A002 | 2024-01-01 | 2000 |
| A001 | 2024-01-01 | 1111 |
| A001 | 2024-01-01 | 9999 |
出力先に A001, 2024-01-01 が存在しないため、ソースの 2 行がどちらも INSERT され重複が発生しました。
解決策
クエリでキーカラムの組み合わせが一意になるよう、GROUP BY などを使って重複を除去してください。
また、品質チェック設定を使うと、ジョブ実行後にキーカラムの組み合わせが一意かどうかを自動検証できます。チェック失敗時にジョブを失敗扱いにする設定も可能です(Essentialプランでは有償オプション、Professionalプランでは標準機能)。
コメント
0件のコメント
記事コメントは受け付けていません。