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

Posted

技术标签:

【中文标题】BigQuery - “经过的时间”或“消耗的槽时间”,哪个是更好的衡量标准?【英文标题】:BigQuery - 'Elapsed time' or 'Slot time consumed', which is a better measure? 【发布时间】:2020-02-27 22:50:52 【问题描述】:

我正在尝试比较两个查询,以了解哪个更好和优化。我应该查看“经过的时间”还是“消耗的时隙时间”?哪个是更好的衡量标准?

以下是一个例子:

查询 1 - 经过的时间:0.3 秒。插槽时间消耗:0.100 秒 查询 2 - 已用时间:0.5 秒,时隙消耗时间:0.081 秒

【问题讨论】:

你在乎什么?可能经过的时间,这是您观察到的时间。 【参考方案1】:

我们需要同时查看两者。首先,让我们了解一下这些是什么。

'elapsed time' 是 BQ 执行查询所用的总时间。 'slot time' 是 vCPU 执行查询所花费的总时间。

因此,“已用时间”会告诉您查询执行的速度,但“时隙时间”会告诉您执行查询所需的 CPU 容量。

理想情况下,'slot time' 应该小于 'elapsed time',因为 BQ 会将整个查询分为多个阶段并在不同的 CPU 中执行,并且会并行执行。然后,巩固结果(如果有的话)并给出结果需要一些时间,所以它需要一些时间来巩固。

如果表设计得当,我的意思是,进行了适当的分区并定义了集群层次结构,那么“经过时间”将高于“时隙时间”,也不应该有太大的差异。

因此,如果“时隙时间”远高于“经过时间”,那么优化查询和表设计的潜力也很大。此外,GCP 将根据已用于执行查询的槽数对 BQ 收费。一些链接供参考。

https://cloud.google.com/bigquery/query-plan-explanation

https://cloud.google.com/bigquery/docs/slots

https://cloud.google.com/bigquery/docs/best-practices-costs

【讨论】:

以上是关于BigQuery - “经过的时间”或“消耗的槽时间”,哪个是更好的衡量标准?的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:必须使用 beam.io.gcp.bigquery.ReadFromBigQuery 指定 BigQuery 表或查询

从 Firebase 到 BigQuery 的实时或每小时数据同步

将 BigQuery 结果导出为 Avro 或 JSON

SHA-256 BigQuery函数或UDF

您是不是曾经使用欧盟或英国帐户从韩国登录 Bigquery?

BigQuery 有区域限制或其他区域之间的延迟?