从Python中将大量数据加载到Google Bigquery中

Eli*_*Eli 1 python google-bigquery

我一直在努力将大块数据加载到bigquery中一段时间​​.在谷歌的文档中,我看到了insertAll方法,它似乎运行正常,但当我尝试在JSON中发送大约100k的数据时,给出了413"实体太大"的错误.根据Google的文档,我应该能够在JSON中发送最多1TB的未压缩数据.是什么赋予了?上一页上的示例让我手动构建请求主体,而不是使用insertAll,这更加丑陋,更容易出错.在这种情况下,我也不确定数据的格式.

所以,所有这些都说,将大量数据加载到Bigquery的干净/正确方法是什么?数据的一个例子很棒.如果可能的话,我真的不想自己构建请求体.

Cra*_*tro 5

请注意,对于将数据流式传输到BQ,任何超过10k行/秒的内容都需要与销售代表交谈.

如果您想直接向BQ发送大块,可以通过它发送POST.如果您正在使用客户端库,它应该处理上载可以恢复的问题.为此,您需要拨打电话jobs.insert()而不是tabledata.insertAll(),并提供load工作说明.要使用Python客户端实际推送字节,您可以创建一个MediaFileUploadMediaInMemoryUpload将其作为media_body参数传递.

另一种选择是在Google云端存储中暂存数据并从那里加载数据.

  • 你也可以用[`jobs.insert()`](https://developers.google.com/resources/api-libraries/documentation/bigquery/v2/python/latest/bigquery_v2.jobs.html#insert)调用`load` job,并使用[`MediaFileUpload`]传递`media_body`参数(https://github.com/google/google-api-python-client/blob/master/googleapiclient/http.py#L381 )或[`MediaInMemoryUpload`](https://github.com/google/google-api-python-client/blob/master/googleapiclient/http.py#L444). (2认同)