首页 > 解决方案 > 如何在不硬编码过滤条件的情况下在谷歌大查询中使用分区修剪?

问题描述

我在 GBQ 中有一个按日期分区的大表。我想使用分区修剪来优化我的查询。问题是过滤条件是从另一个表中读取的值,我无法对该值进行硬编码。我想知道在这种情况下是否有任何方法可以使用分区修剪,而且我不能使用声明语句,因为我正在使用的调度引擎不允许这样做。这是我的代码:

WITH CTE AS
(
  SELECT tmp.partitionStartDate
  FROM tmp_table tmp
)
SELECT *      
FROM table1  t
WHERE sbcc.partitionDate = (select partitionStartDate from cte)

标签: google-bigquerypartitioningdatabase-partitioningpruning

解决方案


下面的脚本将起作用:

DECLARE partitionDate DEFAULT (
  SELECT tmp.partitionStartDate
  FROM tmp_table tmp
);

SELECT *      
FROM table1  t
WHERE sbcc.partitionDate = partitionDate;

或者

EXECUTE IMMEDIATE
"""
SELECT *      
FROM table1  t
WHERE sbcc.partitionDate = @partitionDate;
""" USING (
  SELECT tmp.partitionStartDate
  FROM tmp_table tmp
) AS partitionDate;

推荐阅读