2012 年 9 月 27 日ごろ、(Java API を使用して) csv ファイルのアップロードを行った結果、データが複製されていることに気付きました。アップロード中のログはエラーを示していませんでしたが、その日の行の大部分が重複していることを確認しました (行ごとにマイクロ秒単位でタイムスタンプが異なります)。私たちは、これが再び起こらないようにする方法を失っています。
フィードバックをお寄せいただきありがとうございます。
2012 年 9 月 27 日ごろ、(Java API を使用して) csv ファイルのアップロードを行った結果、データが複製されていることに気付きました。アップロード中のログはエラーを示していませんでしたが、その日の行の大部分が重複していることを確認しました (行ごとにマイクロ秒単位でタイムスタンプが異なります)。私たちは、これが再び起こらないようにする方法を失っています。
フィードバックをお寄せいただきありがとうございます。
まず、(ロードジョブの履歴を確認して)実際にロードジョブを2回実行していないことを確認します。bqコマンドラインクライアントを使用している場合:
# Show all jobs for your selected project
bq ls -j
# Will result in a list such as:
...
job_d8fc9d7eefb2e9243b1ffde484b3ab8a load FAILURE 29 Sep 00:35:26 0:00:00
job_4704a91875d9e0c64f7aaa8de0458696 load SUCCESS 29 Sep 00:28:45 0:00:05
...
# Find the load jobs pertaining to the time of data loading. To show detailed information
# about which files you ingested in the load job, run a command on the individual jobs
# that might have been repeats:
bq --format prettyjson show -j job_d8fc9d7eefb2e9243b1ffde484b3ab8a
調査していただきありがとうございます。BigQuery 側でデータが複製されたとは信じがたい (ほぼ不可能) です。そうは言っても、私たちが見ることができるものは何もそうではないことを示しているようです. 前述のように、すべての行にマイクロ秒のタイムスタンプ値があります。参照されている 2 つのジョブ ID について、行をランダムに選択し、これまでにインポートしたすべてのデータの中で一意の値であることを確認しました。同じクエリを実行すると、bigquery テーブルに 2 つの (同一の) 行が取得されます。
インポート中にデータが複製される理由はわかりません。ジョブ ID やプロジェクト ID など、問題の診断に役立つ詳細情報を提供してください。
一般に、Michael が彼の回答で述べたように、重複データを見た人は通常、同じジョブを 2 回実行しています。(ジョブが失敗した場合、テーブルを変更しないでください)。
この種の競合を防ぐ方法は、ジョブに名前を付けることです。これは、プロジェクト レベルでジョブ名の一意性を強制するためです。たとえば、1 日に 1 回ロードを行う場合、ジョブ ID に「job_2012_10_08_load1」のような名前を付けることができます。そうすれば、同じジョブを 2 回実行しようとすると、2 回目のジョブは開始時に失敗します。