繁体   English   中英

Bigquery 将子查询应用于分区时间

[英]Bigquery apply subquery to partition time

我有两个单独工作正确的查询,但一起出现错误:

WITH minimum_time AS 
(
    SELECT DATE (min(_PARTITIONTIME)) AS minimums
    FROM `Day`
    WHERE DATE (_PARTITIONTIME) = "2020-11-20"
)
SELECT *
FROM `Day`
WHERE DATE (_PARTITIONTIME) > (SELECT minimums
                               FROM minimum_time)

我得到这个错误:

如果没有筛选列“_PARTITION_LOAD_TIME”、“_PARTITIONDATE”、“_PARTITIONTIME”(可用于分区消除),则无法查询表“Day”

我不太明白为什么会这样,第一个查询返回一个日期。

您收到错误是因为:

  1. 该表具有选项集:require_partition_filter=true,如果未指定分区过滤器,则对该表的查询应该失败。
  2. 使用子查询作为分区过滤器有限制, 这里记录了限制。

通常,当过滤器可以在查询开始时进行评估而不需要任何子查询评估或数据扫描时,分区修剪将降低查询成本。

解决方法是使用 BigQuery 脚本来预先确定分区过滤器,例如:

DECLARE minimums DATE DEFAULT ((SELECT minimums FROM `Day` WHERE ...));
SELECT *
FROM `Day`
WHERE DATE (_PARTITIONTIME) > minimums; -- minimums is a constant to the second query

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM