google-bigquery - 如何在不硬编码过滤条件的情况下在谷歌大查询中使用分区修剪?
问题描述
我在 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;
推荐阅读
- php - 如何使用 Heroku 部署 Laravel + Vue 项目
- unicode - 使用大于 0xFFFF 的字符
- java - 如何向 Java 中的类库添加一个小的附加包?
- javascript - 如何根据事件正确指定列的可见性?
- oracle - Solaris Client 8.1.7 无法连接到 Oracle 12C R1
- javascript - Google Drive 未加载 pdf 链接
- php - 在 php 中显示的总和值
- sql - 在 table1 中选择值、Group By、Sum 的存储过程,然后将这些值插入到 table2 中
- ios - 如何将 dateFormatter 值(例如 2019 年 7 月 7 日)从时间戳转换为 2019 年 7 月 7 日?
- python - 在 Python Pygame 中调用对象和传递变量不工作错误说变量未定义