如何使用 BigQuery 槽

Posted

技术标签:

【中文标题】如何使用 BigQuery 槽【英文标题】:How to use BigQuery Slots 【发布时间】:2015-11-03 03:00:12 【问题描述】:

你好。

最近,我想通过在一些表上使用“分组依据”在 bigquery Web UI 中运行查询(表的名称适合 xxx_mst_yyyymmdd)。行数将超过 1000 万。不幸的是,查询失败并出现以下错误:

查询失败 错误:查询执行期间资源超出。

我对查询语言做了一些改进,这次可能不会出现错误。但是随着我数据的增加,以后也会出现错误。所以我检查了Bigquery的最新版本,可能有两个解决方法:

1.2016/01/01 之后,Bigquery 将更改 Query 定价层以满足“高计算层”,这样“resourcesExceeded 错误”就不会再次发生。

2.BigQuery 插槽。 我在谷歌查了一些文档,没有找到如何使用 BigQuery Slots 的方法。是否有 BigQuery Slots 的示例或用例?或者我必须联系 BigQuery 团队才能打开该功能?

希望有人能帮我回答这个问题,非常感谢!

【问题讨论】:

【参考方案1】:

几点:

    我很惊讶基数为 10M 的 GROUP BY 因超出资源而失败。您能否提供失败查询的作业 ID,以便我们进行调查?您提到您担心随着数据大小的增加而更频繁地遇到这些错误;您应该能够将数据大小增加几个数量级而不会看到这一点;您的查询或数据可能遇到错误或奇怪的地方。

    “高计算层”不一定会消除超过资源。在大多数情况下,resourcesExceeded 意味着 BigQuery 遇到了内存限制;高计算层仅解决 CPU 使用率问题。 (请注意,它们尚未启用)。

    BigQuery 槽可让您更快地处理数据,并提供更可靠的性能。在大多数情况下,它们也无助于防止 resourcesExceeded 错误。

    目前(截至 11 月 5 日)存在一个错误,您可能需要为每个关键字提供 GROUP BY。最近的更改应该使 BigQuery 能够自动选择执行策略,因此不需要 EACH,但在某些情况下它没有选择正确的策略。如有疑问,请将 EACH 添加到您的 JOIN 和 GROUP BY 操作中。

【讨论】:

Jordan Tigani,感谢您的建议,因为您问“工作 ID 是什么”,因为该项目中有一些商业机密,所以我在 Google 支持中心提供了 SQL 和工作 ID,如果有什么消息,我会更新这张票。 作为我的 SQL 的简要视图: SELECT COUNT() AS ct, A, B, C FROM (SELECT A, B, C FROM [dataset.a] ) GROUP BY A, B, C HAVING ct > 1 或者像这样:SELECT COUNT() AS ct, A, B, C FROM [dataset.a] GROUP BY A, B, C HAVING ct > 1 数据集的行数。 a 约为 11,000,000。 更新:SELECT COUNT() AS ct, A, B, C FROM (SELECT A, B, C FROM [dataset.a] ) GROUP BY A, B, C HAVING ct > 1 → 失败. SELECT COUNT() AS ct, A, B, C FROM (SELECT A, B, C FROM [dataset.a] ) GROUP EACH BY A, B, C HAVING ct > 1 → 成功。这似乎也需要 EACH。 我已更新我的回复以包含添加 EACH 的建议。正如我所提到的,这是一个我们正在积极修复的错误。【参考方案2】:

要让您的项目有资格使用插槽,您需要联系支持人员。

【讨论】:

以上是关于如何使用 BigQuery 槽的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 如何为我的查询使用槽

BigQuery - “经过的时间”或“消耗的槽时间”,哪个是更好的衡量标准?

如何使用 Bigquery 连接 GCP SQL 实例?

如何使用信号/槽机制获取发送者小部件?

如何使用 dataflowsdk 将数据从 bigquery 转录到 bigquery?

如何使用 bigquery 服务对象