重複が発生する可能性があります。増分更新のキーカラムの一致判定はソースデータ内の重複をチェックしないためです。挙動はモードによって異なります。
- 上書き:出力先の一致行を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件のコメント
記事コメントは受け付けていません。