使用连接表中的引用在 BigQuery 中查询分区表

use*_*628 5 google-bigquery

我想运行一个查询,使用表 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 中的所有分区。有什么办法可以解决这个问题吗?

提前致谢。

Pen*_*m10 1

文档关于您的用例是这样说的:

将谓词过滤器表达得尽可能接近表标识符。需要评估查询的多个阶段才能解析谓词的复杂查询(例如内部查询或子查询)不会从查询中删除分区。

以下查询不会修剪分区(注意子查询的使用):

#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)