google-cloud-platform - BigQuery - 集群表不使用多个键减少查询大小
问题描述
我正在尝试优化我在 BigQuery 中的查询成本,并且我一直在尝试聚集表。供参考:BigQuery - 仅使用键值模式查询表中的键子集
按单列对表进行聚类成功地减少了我的查询大小。但是,使用多个列(示例显示在: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
要使用博文中的示例,在以下两个查询中,
Q1:
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
Q2:
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
我本来预计第二季度会更便宜,因为集群是按(wiki,title),但事实似乎并非如此。
解决方案
在您的查询 1 (Q1) - 估计处理成本为 0.43 美元86.1 GB
- 实际字节数计费 -18.4 GB
对于第二季度 - 估计处理成本 0.90 美元180 GB
- 实际字节计费 -10.3 GB
对我来说听起来更便宜:o)
但在现实中,save 甚至不止是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
问题 3:
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
注意/提醒:当您查询聚集表时 - 估计仅基于分区显示(截至目前 - 我的理解是稍后这将被修复/改进)
推荐阅读
- java - 试图找到这个输入的最长回文
- selenium - Selenium 在更改到新标签时抛出奇怪的错误
- python - 如何将 Tensorflow BatchNormalization 与 GradientTape 结合使用?
- html - 需要背景 css 视频帮助
- r - 根据同一数据框中的条件生成其他行
- javascript - 尝试使用 @react-google-maps 对数组中的标记进行聚类时,this.props.children 不是一个函数
- c# - 从动态 ExpandoObject 生成 JSON 字符串
- typescript - 尽管设置了私有属性,Typescript getter 返回 undefined
- c# - 如何从通用存储库调用通用类
- c++ - 为什么在我声明指向对象的指针时不调用析构函数