BigQuery-丛集表格无法减少多个键的查询大小

时间:2018-08-07 05:10:34

标签: google-cloud-platform google-bigquery

我正在尝试优化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

由于群集是按(维基,标题)进行的,所以我预计第二季度会便宜一些,但事实并非如此。

2 个答案:

答案 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 tablesstill on beta,因此我们可以期待将来会有所改进。