Google bigquery 使用来自联接表的引用在BigQuery中查询分区表
我想运行一个查询,使用表B中的值对表a进行分区。 例如:Google bigquery 使用来自联接表的引用在BigQuery中查询分区表,google-bigquery,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' 此查询将扫描表A中的所有分区,并且不考虑我在where子句中指定的用于分区的日期。我尝试过以几种不同的方式运行这个查询,但都产生了相同的结果—
#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'
此查询将扫描表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)
现在有了BigQueryBeta,就有了一种修剪分区的方法
基本上,定义脚本变量来捕获子查询的动态部分。然后,在后续的查询中,脚本变量被用作过滤器来修剪要扫描的分区
声明日期过滤器数组
默认选择数组_AGGdate FROM B,其中。。。;
选择一个用户标识
来自我的_project.xxx A
内部加入我的_项目.yyy B
在A.。_partitiontime=timestampB.date上
其中,UNNESTdate过滤器中的.\u分区时间
恐怕这个解决方案也会扫描整个表。。查询首先扫描表1中的所有分区,然后根据表3应用的条件筛选相关数据。如果您阅读了我的消息,我确认这会扫描所有表,而不会删除分区,这意味着它会扫描所有表。感谢奔腾10。我刚意识到你在陈述谷歌文档。。如果我理解正确,那么我的问题的答案是——没有办法使用不同表中的值来修剪分区。