使用调度查询和目标表声明大查询变量

问题描述 投票:0回答:1

我在Big Query中使用计划的查询,该查询将前一天的数据追加到Big Query表中。前一天的数据在查询运行时并不总是可用,因此,为了确保我拥有所有数据,我需要计算“大查询”表中的最后可用日期。

我的第一次尝试是写以下查询:

SELECT *
FROM sourceTable
WHERE date >= (SELECT Max(date) from destinationTable)

当我运行此查询时,仅正确导出日期> = max(date)。但是,查询处理整个sourceTable,而不仅是J-max(date)。因此,成本高于预期。

我还试图使用“ DECLARE”&“ SET”(https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting)声明变量。该解决方案可以正常工作,并且仅处理J-max(date)。但是,BQ将以“ DECLARE”作为查询的查询解释为脚本,因此无法使用计划的查询将结果自动导出到BQ表。

DECLARE maxDate date;
SET maxDate = (SELECT Max(date) from destinationTable); 
SELECT *
FROM sourceTable
WHERE date >= maxDate

还有另一种做我想做的事情吗?还是在带有目标表的计划查询中使用“ DECLARE”和“ SET”声明变量的方法?

谢谢!

google-bigquery
1个回答
0
投票

destinationTable是否已分区?如果没有,您可以将其重新创建为分区表吗?如果它是分区表,并且在destinationTable.date列上已分区,则可以执行以下操作:

SELECT *
FROM sourceTable
WHERE date >= (SELECT MAX(_PARTITIONTIME) from destinationTable)

由于_PARTITIONTIME是伪列,因此运行子查询没有任何花费。

© www.soinside.com 2019 - 2024. All rights reserved.