2016-08-23 9 views
0

GoogleBigqueryにjsonファイルをロードしようとしていますが、 https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/load_data_by_post.pyのスクリプトを少し修正して使用しています。 私はMediaFileUpload大きなファイルにBigQueryスクリプトが失敗しました

,chunksize=10*1024*1024, resumable=True)) 

を追加しました。

このスクリプトは、数百万のレコードを持つサンプルファイルに対して正常に動作します。実際のファイルは約140 GBで約200,000,000レコードです。 insert_request.execute()は常に半時間かそこら後

socket.error: `[Errno 32] Broken pipe` 

で失敗します。どのようにこれを修正することができますか?各行は1 KB未満なので、クォータの問題ではありません。

+0

ここで同じ質問があります。 http://stackoverflow.com/questions/38971523/insert-large-amount-of-data-to-bigquery-via-bigquery-python-library –

+0

固定フォーマットとタイプミス – Prune

+0

Hey Jayadevan、BigQueryエンジニアリングチームあなたがプロジェクトと仕事のIDを投稿したいのであれば、私たちのログに何か目立つものがあるかどうかを見てみることができます。 – Tib51

答えて

2

大きなファイルを処理する場合、ストリーミングは使用しませんが、バッチロードを使用すると、ストリーミングは1秒あたり最大100,000行を簡単に処理します。これはストリーミングには適していますが、大きなファイルをロードするには適していません。

リンクされているサンプルコードは正しいものです(ストリーミングではなくバッチ)。このサンプルコードでは、このすべてのデータをBigQueryに直接ロードしようとしていますが、POSTによるアップロードは失敗します。

解決方法:POSTを通じて大量のデータを読み込む代わりに、まずGoogle Cloud Storageでステージングし、BigQueryにGCSからファイルを読み込ませるように指示します。

更新:エンジニアリングチームと話をすると、小さい数字のchunksizeを試してみるとPOSTが機能するはずです。

+1

それは誰かを助ける場合、いくつかの観察。私はチャンクが問題だとは思わない。先ほどパイロットテストをしていた時、1000万レコードしかなかったので、100MBにしていました。新しい完全なデータファイルでは、私は上記のエラーを取得していた。その後、私は圧縮形式に切り替えて、クォータの問題に遭遇しました。それから、私は圧縮ファイルを複数の塊に分割して作業していますが、時間がかかります。次のステップは、圧縮されていないファイルをチャンクに分割してそれを試みることです。すべての提案をありがとう。 – Jayadevan

+0

@Jayadevan私も同じ種類の問題があります。私にとっては、8.5mbのcsvのために、この行にはまった時間があります。 https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/bigquery/api/load_data_by_post.py#L80何か考えていますか?あなたの作業コードの参照URLがありますか? –

+0

あなたはchunk_sizeを使いましたか?私は今try/exceptブロックにmediafileuploadを持っていますので、もう1回試みます。エラー状態をチェックし、特定の例外節を持つ方が良いです。これは私がコードを試したところです: job = insert_request.execute() job = insert_request.execute() "stuck"と答えた人以外は です。あなたは間違いをしていますか、それとも掛けられていますか? – Jayadevan

関連する問題