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

时间:2014-05-20 22:08:20

标签: python google-bigquery

我一直在努力将大块数据加载到bigquery中一段时间​​。在Google的文档中,我看到了insertAll方法,它似乎运行正常,但却给了我413"实体太大"当我尝试在JSON中发送大约100k的数据时发生错误。 Per Google's docs, I should be able to send up to 1TB of uncompressed data in JSON。是什么赋予了?上一页上的示例让我手动构建请求主体,而不是使用insertAll,这更加丑陋,更容易出错。在这种情况下,我也不确定数据的格式。

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

2 个答案:

答案 0 :(得分:5)

请注意,要将数据流式传输到BQ,anything above 10k rows/sec需要与销售代表交谈。

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

另一种选择是在Google云端存储和load it from there中暂存数据。

答案 1 :(得分:1)

示例here使用可恢复上传来上传CSV文件。虽然使用的文件很小,但它应该适用于几乎任何大小的上传,因为它使用强大的媒体上传协议。听起来你想要json,这意味着你需要为json略微调整代码(json的一个例子是在同一目录下的load_json.py示例中)。如果您要上传的是流而不是文件,则可以使用MediaInMemoryUpload代替示例中使用的MediaFileUpload

顺便说一句......克雷格的回答是正确的,我只是觉得我已经加入了示例代码的链接。