Python 大文件的BigQuery脚本失败

Python 大文件的BigQuery脚本失败,python,json,google-bigquery,Python,Json,Google Bigquery,我正在尝试使用下面的脚本将json文件加载到GoogleBigquery 几乎没有修改。 我补充说 ,chunksize=10*1024*1024, resumable=True)) 到媒体文件上传 对于一个有几百万条记录的示例文件,脚本可以很好地工作。实际文件约为140 GB,记录约为20000000条插入请求。执行()总是失败 socket.error: `[Errno 32] Broken pipe` 大约半小时后。如何解决这个问题?每行小于1KB,因此不应该是配额问题 处理大型文件

我正在尝试使用下面的脚本将json文件加载到GoogleBigquery 几乎没有修改。 我补充说

,chunksize=10*1024*1024, resumable=True))
媒体文件上传

对于一个有几百万条记录的示例文件,脚本可以很好地工作。实际文件约为140 GB,记录约为20000000条插入请求。执行()总是失败

socket.error: `[Errno 32] Broken pipe` 

大约半小时后。如何解决这个问题?每行小于1KB,因此不应该是配额问题

处理大型文件时,不使用流式处理,而是批处理加载:流式处理可以轻松处理每秒多达100000行的文件。这对于流媒体来说非常好,但是对于加载大文件来说就不行了

链接的示例代码做的是正确的(批处理而不是流式处理),因此我们看到的是另一个问题:此示例代码试图将所有这些数据直接加载到BigQuery中,但通过POST部分上传失败

解决方案:与其通过POST加载大块数据,不如先将它们放在Google云存储中,然后让BigQuery从GCS读取文件


更新:与工程团队交谈,如果您在处理大文件时尝试更小的
chunksize

则POST应该可以工作。不要使用流式处理,但批量加载:流式处理可以轻松处理每秒100000行。这对于流媒体来说非常好,但是对于加载大文件来说就不行了

链接的示例代码做的是正确的(批处理而不是流式处理),因此我们看到的是另一个问题:此示例代码试图将所有这些数据直接加载到BigQuery中,但通过POST部分上传失败

解决方案:与其通过POST加载大块数据,不如先将它们放在Google云存储中,然后让BigQuery从GCS读取文件


更新:与工程团队交谈,如果您尝试一个更小的
chunksize

相同的问题,那么这篇文章应该可以。固定格式和打字错误Jayadevan,我是BigQuery工程团队的成员,如果你想发布项目和工作id,我可以看看我们的日志中是否有突出的内容。这里的问题相同。修正了格式和打字错误Jayadevan,我是BigQuery工程团队的成员,如果你想发布项目和工作id,我可以看看我们的日志中是否有突出的内容。一些观察,以防对某人有所帮助。我认为块大小不是问题。当我早些时候进行试点测试时,只有1000万条记录,我将它保持在100MB,并且工作正常。使用新的完整数据文件,我得到了上面提到的错误。然后我切换到压缩格式,遇到了配额问题。然后我将压缩文件分割成块,它可以工作,但需要花费很多时间。下一步是将未压缩的文件分割成块,然后重试。谢谢你的建议。@Jayadevan我也有同样的问题。对我来说,8.5mb的csv需要很多时间才能到达这条线路。有什么想法吗?您的工作代码是否有参考url?是否使用了chunk\u size?我现在将mediafileupload放在try/except块中,以便再次尝试。检查错误条件并使用特定的exception子句更好。这就是我现在使用的代码try:job=insert\u request.execute()除了:job=insert\u request.execute()你说的“卡住了”。你是有错误还是有点悬而未决?一些观察,以防对某人有所帮助。我认为块大小不是问题。当我早些时候进行试点测试时,只有1000万条记录,我将它保持在100MB,并且工作正常。使用新的完整数据文件,我得到了上面提到的错误。然后我切换到压缩格式,遇到了配额问题。然后我将压缩文件分割成块,它可以工作,但需要花费很多时间。下一步是将未压缩的文件分割成块,然后重试。谢谢你的建议。@Jayadevan我也有同样的问题。对我来说,8.5mb的csv需要很多时间才能到达这条线路。有什么想法吗?您的工作代码是否有参考url?是否使用了chunk\u size?我现在将mediafileupload放在try/except块中,以便再次尝试。检查错误条件并使用特定的exception子句更好。这就是我现在使用的代码try:job=insert\u request.execute()除了:job=insert\u request.execute()你说的“卡住了”。你是有错误还是有点挂起了?