2016-08-16 19 views
6

大規模なcsvファイルとExcelファイルを読み込み、必要なフィールドとタイプに応じて必要なcreate tableスクリプトを動的に作成します。次に、作成した表にデータを挿入します。bigquery-pythonライブラリを使用してBigQueryに大量のデータを挿入

私はthisを読んでおり、大量のデータの場合はtabledata.insertAll()の代わりにjobs.insert()で送信する必要があることを理解しました。

これは私がそれを呼び出す方法です(大きなファイルではなく、小さいファイルの場合はWorks)。

ライブラリのpush_rowsを使用すると、このエラーがウィンドウに表示されます。

[Errno 10054] An existing connection was forcibly closed by the remote host 

これはubuntuです。私はBigQuery-Pythonコードを行ったとき

[Errno 32] Broken pipe 

は、だから、table_data.insertAll()を使用しています。

このライブラリでどうすればいいですか? Googleのストレージにアップロードできることはわかっていますが、これを使って直接アップロードする方法が必要です。

答えて

2

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

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

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

も参照してください。BigQuery script failing for large file

+0

OPにリンクを追加しましたか? –

+1

oops、固定再帰! –

+0

@FelipeHoffa gsutil内部でPythonコードを使用できますか?直接csvファイルパスを指定してアップロードすると、いくつかの列タイプの問題がありました。私はcsvを読んで、それに応じてフィールドをキャストすることができます。私はそれらをキャストした後、テーブルにオブジェクトを挿入する方法はありません(辞書のリストかもしれません)? –

関連する問題