Bigquery 作业 - 连接已关闭

Posted

技术标签:

【中文标题】Bigquery 作业 - 连接已关闭【英文标题】:Bigquery Job - Connexion closed 【发布时间】:2016-01-06 14:40:57 【问题描述】:

我使用 bg 命令行在表中插入数据,有时(1% 或 2%)我有错误

加载操作中的 BigQuery 错误:无法与 BigQuery 连接 服务器由于:错误(10054,'现有连接被强制 被远程主机关闭')

如果我之后重新执行命令,作业运行成功。

我没有使用 Cloud Storage 和 Bucket,但我已经在使用 Compute Engine 服务器的 Google 网络中

感谢您的帮助

【问题讨论】:

【参考方案1】:

您在使用bq 命令行客户端时似乎遇到了严重的连接错误。

当您的客户端和 BigQuery 服务之间的服务器终止连接时,会发生连接错误。 BigQuery 本身总是返回 JSON 负载。如果bq 客户端收到非 JSON 响应,则会显示错误消息“Could not connect with BigQuery server due to:”错误消息。 (错误消息的最后一部分包含一些中间服务器遇到的任何内容。)

弄清楚为什么大约 1% 的操作因连接错误而失败可能很困难。

也许您的 Google Compute Engine 实例在 BigQuery 不存在的区域中运行?目前,BigQuery 在欧洲和美国都有业务。如果您没有在这些位置附近运行实例,那么长距离网络连接可能会导致问题。尝试使用美国的某个区域,看看您是否有更好的连接性。

如果您位于 BigQuery 所在的区域,请考虑提出支持请求。 https://cloud.google.com/support/

作为一种变通方法,您可以自动重试 BigQuery 操作。

一个警告:bq 命令行客户端不会重试 HTTP 连接错误的操作。在某些情况下,这可能会导致重复工作(例如,插入允许服务器提供 job_id 的加载作业)。在其他情况下,这会将“已经存在”的错误代码与成功混为一谈,某些用例可能希望将其区分开来。

如果您的用例可以安全地重试,那么您的脚本可以安全地重试失败的bq 操作。您可能想要编写一个自定义客户端来执行您需要的操作,并以安全重试的方式执行它们。例如。 bq.py 使用 bigquery_client.py 来完成它的工作,并且该程序层具有更多功能,例如在 table.insert 操作上“忽略现有”的能力。虽然 bq.py 无法“mk”一个已经存在的表,但 bigquery_client.py 的 CreateTable 可以“成功”,即使该表已经存在。这将简化重试。

祝你好运!

【讨论】:

感谢 Michael 的回答,Compute Engine 和 BigQuery 数据都存储在欧洲同一地区。当我们发现错误时,我们将处理重新执行,但奇怪的是我在 Google 网络中丢失了 http 连接。同时,我们提出支持请求

以上是关于Bigquery 作业 - 连接已关闭的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中恢复过期的 Firebase 表并将数据保存时间超过 60 天

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

如何限制 Google Bigquery 中的作业数量 [关闭]

BigQuery 作业状态已完成,但未使用气流插入任何行

BigQuery:写入查询结果时使用 bigquery 作业的意外行为

BigQuery 隐藏 UDF 实现