使用模板表的 BigQuery 流式插入 - 503 错误

Posted

技术标签:

【中文标题】使用模板表的 BigQuery 流式插入 - 503 错误【英文标题】:BigQuery streaming insert using template tables - 503 errors 【发布时间】:2018-03-17 00:50:06 【问题描述】:

我们一直在两个数据集上使用流式插入,一个带有日期分区表,一个带有非日期分区表。很长一段时间(一年多),它们一直运行良好。

最近我们注意到 BigQuery 更频繁地响应 503 错误。 15% 到 50% 的时间。

在尝试分析问题时,我们构建了测试客户端,该客户端仅完成 1 条记录的流式传输,并使用了模板后缀选项。我们看到了一种我们以前从未见过的非常奇怪的行为。以下是场景:

    templateSuffix='xxx' 和 tableId='sessions_',其中 session_xxx 不存在。这行得通! templateSuffix='yyy' 和 tableId='sessions_',其中 session_yyy 存在于不久前。这失败了! (503) templateSuffix='xxx' 和 tableId='sessions_',其中 sessions_xxx 是由第一次测试创建的。这行得通!

我们在使用 API Explorer 时也看到了相同的行为。

由于某些未知原因,我们的生产系统仍然只是以前面提到的速度失败,但测试始终失败。生产系统位于数据中心,但测试是在我们的办公室运行的。

看起来 503 是包罗万象的错误,我们甚至尝试只传递一个字段以确保它不是数据。那里也没有运气。场景是一致的。

没有模板后缀的流式传输,适用于存在已久的表和新创建的表,这使我们相信问题似乎出在模板后缀功能上。

不确定是否相关(可能不相关),但是当使用日期分区表流式传输到第二个数据集时,错误率非常相似。但此外,当 insertAll 调用没有错误响应时,大约 40% 的时间数据即使在一天后也不会显示在表中。

【问题讨论】:

能否提供每个失败的具体错误信息? 几乎都是:503 Service Unavailable "code" : 503, "errors" : [ "domain" : "global", "message" : "执行过程中遇到错误。重试可能解决问题。", "reason" : "backendError" ], "message" : "执行过程中遇到错误。重试可能会解决问题。", "status" : "UNAVAILABLE" 你可以把project_id、dataset_id、table_id、插入时间等更多信息发给我,让我看看。 【参考方案1】:

您很可能遇到了一个已知的错误,即抛出 INTERNAL_ERROR 而不是 SCHEMA_INCOMPATIBLE。所以基本上系统错误地返回 503 错误,而原因是表模式中的错误 - 生成的表与模板表具有不同的模式。生成的表应该是流系统自动从模板表创建的。

【讨论】:

以上是关于使用模板表的 BigQuery 流式插入 - 503 错误的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery 流式插入使用具有空字段的数据流

Google 的 Bigquery 客户端库中的 put 方法是不是使用流式插入?

流式传输到 BigQuery 表的数据何时可用于 Query 操作?

如何在 C# 中提高数据流插入 Bigquery 表的性能

BigQuery 流数据无法立即获得

使用 AVRO 格式的 BigQuery 流式插入