如何在 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);
我在 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);