【发布时间】:2019-09-22 03:02:28
【问题描述】:
我们有一组 Google BigQuery 表,出于技术原因,它们都使用通配符进行区分,例如 content_owner_asset_metadata_*。这些表格每天更新,但时间不同。
我们需要从通配符中的每个表中选择最新的分区。
现在我们正在使用这个查询来构建我们的派生表:
SELECT
*
FROM
`project.content_owner_asset_metadata_*`
WHERE
_PARTITIONTIME = (
SELECT
MIN(time)
FROM (
SELECT
MAX(_PARTITIONTIME) as time
FROM
`project.content_owner_asset_metadata_*`
WHERE
_PARTITIONTIME > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
)
)
该语句找出所有最新表的保证日期并选择该日期的数据,但是我需要一个过滤器从每个表的最大分区时间中选择数据。我知道我需要将_TABLE_SUFFIX 与_PARTITIONTIME 一起使用,但是如果不加载我们所有的数据(非常昂贵)并使用标准的每组最大n 解决方案,我无法完全弄清楚如何使选择工作.
我们不能只合并一堆静态表,因为我们的数据集摄取可能会发生变化,而且我们构建的脚本需要能够适应。
【问题讨论】:
-
这是我通常会以编程方式构建查询的地方。你有几张桌子?如果您从他们那里获取数据,对于他们最近各自的日期分区,会很好吗?
-
我们有大约 40 个表,每个表有近 700 个分区。我们想要查询每个表的最新分区,而不是每个表中的其他 699 个分区。最终目标是构建一个查看器派生表(基本上是一个视图),其中包含每个表中的最新数据。
标签: sql google-bigquery greatest-n-per-group