我正在尝试优化BigQuery中的查询费用,并且一直在尝试集群表。 供参考:BigQuery - querying only a subset of keys in a table with key value schema
通过单列对表进行聚类可以成功减小查询量。但是,使用多列(示例显示在https://cloud.google.com/bigquery/docs/querying-clustered-tables#sample_table_used_in_the_examples中)并不会导致查询大小的减少。
要使用文档中给出的示例,
SELECT
SUM(totalSale)
FROM
mydataset.ClusteredSalesData
WHERE
customer_id = 10000
AND product_id LIKE 'gcp_analytics%'
如果表上没有集群,这将查询整个数据集(例如100GB),当仅由customer_id集群时,减少到大约10GB(在实际运行后看到,而不是在验证器上看到)当同时由customer_id和product_id聚集时(即使在实际运行查询之后)。
我尝试更改集群的顺序,WHERE子句的顺序等。似乎没有任何改变。
这是预期的行为吗?在BigQuery上出错?还是我做错了什么?
更新: 感谢@ Pentium10向我指出:https://medium.com/@hoffa/bigquery-optimized-cluster-your-tables-65e2f684594b
要在以下两个查询中使用博客文章中的示例,
第一季度:
SELECT wiki, SUM(views) views
FROM fh-bigquery.wikipedia_v3.pageviews_2017
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
AND wiki = 'en'
--AND title = 'Barcelona'
GROUP BY wiki ORDER BY wiki
第二季度:
SELECT wiki, SUM(views) views
FROM fh-bigquery.wikipedia_v3.pageviews_2017
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
AND wiki = 'en'
AND title = 'Barcelona'
GROUP BY wiki ORDER BY wiki
由于群集是按(维基,标题)进行的,所以我预计第二季度会便宜一些,但事实并非如此。
答案 0 :(得分:1)
在您的查询1(Q1)中-处理86.1 GB
的估计费用为$ 0.43-计费的实际字节数-18.4 GB
第二季度-处理180 GB
的估计费用为$ 0.90-计费的实际字节数-10.3 GB
听起来对我来说便宜点:o)
但是实际上,保存的范围甚至不只是down to 10.3 GB from 18.4 GB
-实际上是down to 10.3 GB from 38.6 GB
。这是因为在Q1中根本不涉及任何title
列,而在Q2中却没有涉及!
因此,为了将苹果与苹果进行比较-您可以按如下所示添加title
-您会看到估算成本为180 GB
-而实际的字节数是-38.6 GB
第三季度:
SELECT wiki, title, SUM(views) views
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
AND wiki = 'en'
-- AND title = 'Barcelona'
GROUP BY wiki, title
注意/提醒:当查询聚簇表时-仅基于分区显示估算值(截至目前-我的理解是稍后将对此进行固定/改进)
答案 1 :(得分:1)
我根据this post的建议,基于Pentium10测试了下一个查询:
SELECT wiki, SUM(views) views
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
AND wiki = 'en'
AND title = 'Barcelona'
GROUP BY wiki ORDER BY wiki
已处理 180.19GB(根据validator
)。 10.3GB已处理运行查询。
SELECT wiki, SUM(views) views
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
AND wiki = 'en'
--AND title = 'Barcelona'
GROUP BY wiki ORDER BY wiki
已处理 86.1GB(根据validator
)。
已运行18.4GB运行查询。
SELECT wiki, SUM(views) views
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE DATE(datehour) BETWEEN '2017-06-01' AND '2017-06-30'
-- AND wiki = 'en'
AND title = 'Barcelona'
GROUP BY wiki ORDER BY wiki
已处理 180.19GB(根据validator
)。
113.85GB已处理运行查询。
正如霍法先生所说,一切看起来都是连贯的,因为簇表的“顺序很重要”(“维基”比“标题”节省的更多)。
是的,验证器仍然无法正常工作,但是clustered tables
是still on beta,因此我们可以期待将来会有所改进。