BigQuery丛集表格:查询执行期间处理的位元组不一致

时间:2018-10-05 07:05:59

标签: google-bigquery clustered-index

对于同一查询的多次运行,处理的字节数是可变的(结果变化很大,从20GB到30GB)。

我在同一个表上运行相同的查询,得到相同的结果,运行了多个查询,统计数据显示每次运行处理的字节数不同。

这是预期的吗?

1 个答案:

答案 0 :(得分:3)

这是群集表的预期行为-一旦查询运行器打开足够多的群集以产生所需的结果,它将停止扫描并仅对到目前为止已扫描的字节收费。

例如:

SELECT * WHERE x=1 LIMIT 1

如果x没有聚类,它将在找到第一个后停止;如果没有x,将进行全表扫描。

对同一张桌子的实际查询:

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%hoffa%'
LIMIT 1

Query complete (2.1s elapsed, 111 MB processed)
Query complete (1.8s elapsed, 126 MB processed)
Query complete (1.9s elapsed, 114 MB processed)

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%khoffa%'
LIMIT 1

Query complete (2.9s elapsed, 2.52 GB processed)
Query complete (3.0s elapsed, 1.19 GB processed)
Query complete (1.9s elapsed, 114 MB processed)


SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%fhoffa%'
LIMIT 1

Query complete (5.1s elapsed, 188 GB processed)
Query complete (5.1s elapsed, 188 GB processed)
Query complete (5.1s elapsed, 188 GB processed)
  • '%hoffa%'扫描的数据较少,因为很有可能在打开的第一个群集中找到它。
  • '%khoffa%'很难找到,因此有时需要打开许多群集-但您可能会很幸运,并在第一个群集上找到它。
  • '%fhoffa%'不存在,因此BQ必须打开每个群集以防万一。
  • 我添加了RAND()以确保不进行缓存。
  • 大获全胜:以前,BigQuery曾经为此类查询收取188 GB的费用,但现在在这种情况下它可以收取其中的0.05%。

请注意,如果您强制BigQuery扫描每个群集,则它将恢复到188GB。例如,如果您要查找顶部的%hoffa%(而不是第一个):

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%hoffa%'
ORDER BY views DESC
LIMIT 1

Query complete (5.5s elapsed, 188 GB processed)

详细了解集群表的优点: