如何解决如何在不硬编码过滤条件的情况下在谷歌大查询中使用分区修剪?
我在 GBQ 中有一个按日期分区的大表。我想使用分区修剪来优化我的查询。问题是过滤条件是从另一个表中读取的值,我无法对该值进行硬编码。我想知道在这种情况下是否有任何方法可以使用分区修剪,并且我也不能使用声明语句,因为我正在使用的调度引擎不允许这样做。这是我的代码:
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。