如何在 google 大查询中使用分区修剪而不对过滤条件进行硬编码?

How to use partition pruning in google big query without hardcoding the filter condition?

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

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

下面的脚本将起作用:

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;

试试这个:

execute immediate "SELECT * FROM table1 WHERE partitionDate = ?" using (SELECT partitionStartDate FROM tmp_table);