0

从成本、时间和处理的角度来看,哪个最好使用。这里 etl_batch_date 是表的分区列。

1.Query - 此查询在运行时将处理 607.7 kb 表大小:9.77 MB

SELECT count(*) from demo 
WHERE etlbatchid = '20200003094244327' and etl_batch_date='2020-06-03
  1. 查询 - 此查询在运行时将处理 427.6 kb 表大小:9.77MB

    SELECT count(*) from demo WHERE etlatchid = '20200003094244327'

另外,当您编写第二个查询时,它是否会从每个分区中读取数据?

您的宝贵意见将不胜感激。

4

1 回答 1

0

经验法则:始终使用分区列来过滤数据。

玩这个查询:

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

# 2.2 GB processed

对于datehour您添加到过滤器的每个数据,都会查询额外的千兆字节数据。那是因为:

  1. 按 datehour 过滤意味着读取 datehour 列。所以这使得查询遍历更多数据。
  2. 但是由于 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是主要的聚类列。

因此,请尝试始终使用分区和集群 - 即使对于较小的表,结果也可能看起来不太直观。

于 2020-06-04T23:17:14.553 回答