如何在进行列过滤时有效地查询日期分区表

时间:2017-07-13 13:57:59

标签: google-bigquery

我有一个日期分区,我用这样的时间戳条件查询

SELECT * 
FROM table
WHERE _PARTITIONTIME BETWEEN TIMESTAMP("2017-07-01")
  AND TIMESTAMP("2017-07-13")

我还希望过滤其他列(分区过滤器之后)。我认为这样做会起作用

SELECT * 
FROM table
WHERE _PARTITIONTIME BETWEEN TIMESTAMP("2017-07-01") 
  AND TIMESTAMP("2017-07-13")
  AND col = "val"

但这会使估计的处理大小增加20倍,所以我猜它会取消_PARTITIONTIME过滤器。看看这个https://cloud.google.com/bigquery/docs/querying-partitioned-tables#scanning_all_partitions然后我尝试在子查询中推送查询,然后在外部查询中执行过滤。

SELECT * 
FROM 
    (SELECT * 
     FROM table
     WHERE _PARTITIONTIME BETWEEN TIMESTAMP("2017-07-01") 
       AND TIMESTAMP("2017-07-13")
  )
WHERE col = "val"

但是它产生了与先前查询相同的估计处理大小。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

事实证明,我在其他地方有一个副作用子查询,它不会影响计算成本,直到我从结果中使用一列。

过滤器确实现在正常工作,没有这种副作用