2016-08-16 63 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并相应地投射字段。我没有一种方法可以在投放它们之后向表格中插入对象(可能是字典列表)? –

相关问题