2016-08-16 65 views
6

我有大量的csv文件和excel文件,我在那裏讀取它們並根據它所具有的字段和類型動態創建所需的創建表腳本。然後將數據插入到創建的表中。通過bigquery-python庫插入大量數據到BigQuery

我已閱讀this,並瞭解我應該用jobs.insert()而不是tabledata.insertAll()來發送大量數據。

這就是我所說的(適用於較小文件而不是大文件)。

result = client.push_rows(datasetname,table_name,insertObject) # insertObject is a list of dictionaries 

當我使用庫的push_rows它在Windows中給出了這個錯誤。

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

and this in ubuntu。

[Errno 32] Broken pipe 

所以,當我通過BigQuery-Python代碼去它使用table_data.insertAll()

我該怎麼用這個庫來做到這一點?我知道我們可以通過Google存儲上傳,但我需要使用此方法直接上傳。

回答

2

處理大文件時不要使用流式傳輸,但是批量加載:流式傳輸很容易每秒處理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並相應地投射字段。我沒有一種方法可以在投放它們之後向表格中插入對象(可能是字典列表)? –

相關問題