我有一个日期分区,我用这样的时间戳条件查询
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"
但是它产生了与先前查询相同的估计处理大小。我怎么能这样做?
答案 0 :(得分:0)
事实证明,我在其他地方有一个副作用子查询,它不会影响计算成本,直到我从结果中使用一列。
过滤器确实现在正常工作,没有这种副作用