エラー
[ERROR]: Error: org.jruby.exceptions.RaiseException: (Error) failed during waiting a Query job, get_job(xxx, embulk_query_job_xxx), errors:[{:reason=>"invalidQuery", :message=>"UPDATE/MERGE must match at most one source row for each target row", :location=>"query"}]原因
転送モードUPSERT(MERGE)にて、更新対象のレコードが転送元/転送先に複数ある場合に発生します。
たとえば、idをマージキーに設定している場合、id=A003が重複しており、エラーになります。
① すでに転送先にid=A003のレコードがある場合に以下のようなデータをBigQueryに転送する、
② または以下のようなデータが入っているBigQueryのテーブルに対して転送する
| id | name | |
|---|---|---|
| A001 | 鈴木 | test@sample.com |
| A002 | 田中 | test-2@sample.com |
| A003 | 伊藤 | test-3@sample.com |
| A003 | 伊藤 | test-3@sample.com |
対処方法
- 転送元のレコードにマージキーに設定しているカラムの値が重複したデータがないか確認してください。
- BigQuery上の転送先に指定しているテーブル内に、マージキーに設定しているカラムの値が重複しているレコードがないか確認してください。
重複分のレコードは削除してから再度ジョブを実行してください。
注意点
転送先のBigQueryに id=A003 のレコードが存在しない場合、転送元に同一IDのレコードが複数あっても、すべて正常に転送されます。
しかし、その結果としてBigQuery側に重複したIDが保存されてしまうため、次回の転送実行時に「マージキー(ID)が一つに定まらない」といったエラーが発生する可能性があります。
そのため、安全なデータ転送を実現するには、転送元・転送先の両方でマージキーがユニーク(一意)であることを確認し、重複を排除した状態で設定を行う必要があります。
コメント
0件のコメント
記事コメントは受け付けていません。