通过bigquery-python库向BigQuery插入大量数据

Mar*_*oon 7 python large-data python-2.7 google-bigquery

我有大型csv文件和excel文件,我在其中读取它们并根据它具有的字段和类型动态创建所需的创建表脚本.然后将数据插入到创建的表中.

我已经阅读了这篇文章并理解我应该发送它们jobs.insert()而不是tabledata.insertAll()大量的数据.

这就是我所说的(适用于较小的文件而不是较大的文件).

result  = client.push_rows(datasetname,table_name,insertObject) # insertObject is a list of dictionaries
Run Code Online (Sandbox Code Playgroud)

当我使用库的push_rows时,它会在Windows中出现此错误.

[Errno 10054] An existing connection was forcibly closed by the remote host
Run Code Online (Sandbox Code Playgroud)

这在ubuntu中.

[Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)

因此,当我使用BigQuery-Python代码时table_data.insertAll().

我怎么能用这个库做这个?我知道我们可以上传谷歌存储,但我需要直接上传方法.

Fel*_*ffa 4

处理大文件时,不要使用流式传输,而是使用批量加载:流式传输每秒可以轻松处理多达 100,000 行。这对于流媒体来说非常好,但对于加载大文件来说却不太好。

链接的示例代码正在做正确的事情(批量而不是流式传输),因此我们看到的是一个不同的问题:此示例代码尝试将所有这些数据直接加载到 BigQuery 中,但通过 POST 部分上传失败。gsutil具有比普通 POST 更强大的上传算法。

解决方案:不要通过 POST 加载大块数据,而是先将它们暂存在 Google Cloud Storage,然后告诉 BigQuery 从 GCS 读取文件。

另请参阅BigQuery 脚本因大文件而失败

  • 哎呀,修复递归! (2认同)