ここに画像の説明を入力してください Googleのビッグクエリに読み込まれた12GBのcsvファイルでクエリを実行しようとしていますが、データセットでクエリを実行できません。データセットが正しく読み込まれているかどうかわかりません。ペインにテーブルとして表示されますが、ジョブ履歴には表示されません。誰もが同じことを手伝うことができますか?.
データセットは、約120万のレコードと3728の変数を持つGoogleストレージバケットから読み込まれました
ジョブID:p-g-us-adv-x-dat-aia-proto-1:bquijob_b951879_1540d02c1a4
スキーマを確認してください-列の1つにスキーマを含めるのを忘れた可能性があります-それが私に起こったことです!
job.errorsには、ジョブの詳細なエラーが含まれています。
これはどこにも文書化されていないようですが、ソースコードで確認できます: https://googlecloudplatform.github.io/google-cloud-python/0.20.0/_modules/google/cloud/ bigquery/job.html および_AsyncJobの場合はctrl + f。
したがって、wait_for_jobコードは次のようになります。
def wait_for_job(job):
while True:
job.reload()
if job.state == 'DONE':
if job.error_result:
raise RuntimeError(job.errors)
return
time.sleep(1)
エラーの詳細を取得するには、CLIからこれを試してください。
>bq show -j <jobid>
ステータスや詳細なエラー情報を出力します。
すべてのジョブIDを一覧表示するには:bq ls -j
GCPドキュメントの手順 の後に同じ問題が発生しました。
2番目のbq load
で失敗しましたが、最初の_ [SOMECODE]では失敗しませんでした。
ignore unknown values
オプションを選択してBigQueryWebインターフェイスでジョブを繰り返すことがわかりました。
私はまだデータのエラーを発見していませんが、それを調べ始めたばかりです。
別のトリック:ヘッダー行のあるcsvファイルを使用し、定義されたスキーマでロードする場合は、コマンドを送信するためにオプション--skip_leading_rows=1
を追加する必要があります(例:bq load --skip_leading_rows=1 --source_format=CSV ...
)。
このオプションがないと、Bigqueryは最初の行(ヘッダー行)をデータ行として解析し、TYPE MISMATCH ERRORが発生する可能性があります(列の定義済みスキーマはFLOATですが、列名はSTRINGであり、bq load
コマンドは解析しますFLOAT値としての列名)。
つまり、BigQueryに読み込まれていないCSVファイルに対してクエリを実行しているように見えます。これは、Google CloudStorageにあるフェデレーションテーブルによって示されているだけです。
基になるCSVファイルにエラーがあったようです。
Too many value in row starting at position:11398444388 in file:gs://syntheticpopulation-storage/Alldatamerged_Allgrps.csv
Too many value in row starting at position:9252859186 in file:gs://syntheticpopulation-storage/Alldatamerged_Allgrps.csv
...
これで問題を診断するのに十分かどうかを教えてください。クエリ履歴を見ると、これらのメッセージがクエリジョブの警告として表示されると思います。
私は内部で3つのバグを報告しました:
実際の問題の手がかりもなく、同じエラーが発生していました。
<https://www.googleapis.com/bigquery/v2/projects/****/jobs/job_******?location=******> <{
reason: invalid message: Error while reading data, error message: JSON table encountered too many errors, giving up. Rows: 115;
errors: 1. Please look into the errors[] collection for more details. }
Bq --format = prettyjson show -j =>を試しました。これも手がかりが得られませんでした。
SAP BODSをETLツールとして使用して、データベースからBigQueryにデータを転送しようとしていました。根本原因を見つけるために、ETLを変更して、列ごとに転送する必要がありました。つまり、最初に1つの列を転送し、次に2番目を追加しました。最初の文字列列の転送は成功しました。しかし、FLOAT列が来ると、転送で同じエラーが発生しました。
データを確認したところ、データベースの10進列に.0345という値が見つかりました。 1未満の値の場合、Big Queryへの転送中にエラーが発生する10進数の前に0が削除されました。
修正するには、BODSのto_decimal変換を適用する必要がありました。
to_decimal(column_name, '.', ',', 4)
「、」は千単位の区切り文字です
「。」は小数点記号です
4は、10進数の後に許可される番号を指定します
注::レコードをGoogle Cloud Storageに同時に転送していましたが、変換前にも成功していました。また、Cloud Storageファイルを手動で使用して同じBigQueryテーブルにデータを入力すると、正常に機能していました。
既知のバグ@googleのようです。すでに修正が行われていますが、本番環境ではプッシュされませんでした。 https://code.google.com/p/google-bigquery/issues/detail?id=621