我想运行一个查询,使用表 B 中的值对表 A 进行分区。例如:
#standard SQL
select A.user_id
from my_project.xxx A
inner join my_project.yyy B
on A._partitiontime = timestamp(B.date)
where B.date = '2018-01-01'
Run Code Online (Sandbox Code Playgroud)
此查询将扫描表 A 中的所有分区,并且不会考虑我在 where 子句中指定的日期(用于分区目的)。我尝试以几种不同的方式运行此查询,但都产生相同的结果 - 扫描表 A 中的所有分区。有什么办法可以解决这个问题吗?
提前致谢。
该文档关于您的用例是这样说的:
将谓词过滤器表达得尽可能接近表标识符。需要评估查询的多个阶段才能解析谓词的复杂查询(例如内部查询或子查询)不会从查询中删除分区。
以下查询不会修剪分区(注意子查询的使用):
#standardSQL
SELECT
t1.name,
t2.category
FROM
table1 t1
INNER JOIN
table2 t2
ON
t1.id_field = t2.field2
WHERE
t1.ts = (SELECT timestamp from table3 where key = 2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2475 次 |
| 最近记录: |