sql—计算时分区列是否有用

ojsjcaue  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(272)

从成本、时间和处理的Angular 来看,哪一个最适合使用。这里etl\u batch\u date是表的分区列。
1.查询-当运行表大小:9.77 mb时,此查询将处理607.7 kb

SELECT count(*) from demo 
WHERE etlbatchid = '20200003094244327' and etl_batch_date='2020-06-03

查询-当运行表大小为9.77mb时,此查询将处理427.6KB
从演示中选择count(*),其中etlbatchid='20200003094244327'
另外,当您编写第二个查询时,它是否从每个分区读取数据?
您的宝贵意见将不胜感激。

vlju58qv

vlju58qv1#

经验法则:总是使用分区列来过滤数据。
使用此查询:

SELECT COUNT(*) 
FROM `fh-bigquery.wikipedia_v3.pageviews_2020`  
WHERE DATE(datehour) IN ('2020-01-01', '2020-01-02')

# 2.2 GB processed

datehour 如果添加到过滤器中,将查询额外的千兆字节数据。那是因为:
按datehour筛选意味着读取datehour列。所以这使得查询遍历更多的数据。
但由于datehour列是分区列,因此它只扫描当天的数据。
现在,如果我添加另一个过滤器:

SELECT COUNT(*) 
FROM `fh-bigquery.wikipedia_v3.pageviews_2020`  
WHERE DATE(datehour) IN ('2020-01-01', '2020-01-02')
AND wiki='en'

# 686.8 MB processed

处理的数据更少!
那是因为 wiki 是主聚类列。
所以试着总是使用分区和集群-即使对于较小的表,结果看起来也不那么直观。

相关问题