Google bigquery BigQuery群集表:跨查询运行处理的字节不一致

Google bigquery BigQuery群集表:跨查询运行处理的字节不一致,google-bigquery,clustered-index,Google Bigquery,Clustered Index,对于同一查询的多次运行,处理的字节数是可变的(结果会发生显著变化,从20GB到30GB) 我在同一个表上运行同一个查询,得到相同的结果,多次查询运行,统计数据显示每次运行处理的不同字节数 这是预期的吗?这是群集表的预期行为-一旦查询运行程序打开足够多的群集以生成所需的结果,它将停止扫描并仅对迄今为止扫描的字节收费 例如: SELECT * WHERE x=1 LIMIT 1 如果x没有集群化,它将在找到第一个后停止,如果没有,它将执行完整的表扫描 对同一表的实际查询: SELECT *, RA

对于同一查询的多次运行,处理的字节数是可变的(结果会发生显著变化,从20GB到30GB)

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


这是预期的吗?

这是群集表的预期行为-一旦查询运行程序打开足够多的群集以生成所需的结果,它将停止扫描并仅对迄今为止扫描的字节收费

例如:

SELECT * WHERE x=1 LIMIT 1
如果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%”
    很难找到,因此有时需要打开许多集群-但您可能会幸运地在第一个集群上找到它
  • “%fhoff%”
    不存在,因此BQ必须打开每个集群,以防它存在
  • 我添加了
    RAND()
    ,以确保没有缓存
  • Big win:以前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)