BigQuery:自定义日期列上时间分区的最大日期

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

我目前正在研究 Google BigQuery 中的一个大表的优化。这些表包含大约 190 亿条记录,总大小为 5.2 TB。为了试验集群和时间分区方面的性能,我在查询中经常使用的自定义 DATE

MyDate
列上复制了带有时间分区的表。 当对时间分区表执行带有
WHERE
子句(例如
WHERE(MyDate) = "2022-08-08"
)的查询时,与没有分区的表消耗的 5.2 TB 数据相比,查询速度更快,并且仅读取约 20 GB 数据。到目前为止,一切都很好。

然而,在应用聚合函数时出现了我的问题,即在我的情况下,

MAX(MyDate)
:分区表和非分区表上的查询读取相同数量的数据并在大致相同的时间内执行。但是,我希望对分区表的查询会更快,因为它只需要扫描单个分区。

似乎可以通过获取数据集的元数据(信息模式)来解决问题,如此处所述。但是,我想避免这样的解决方案,因为它增加了我们查询的复杂性。

是否有更优雅的方法来获取基于自定义列的时间分区 BigQuery 表的

MAX
,而无需扫描整个表或从信息架构中获取元数据?

google-bigquery
1个回答
0
投票

此查询有效,不需要数据扫描:

-- replace your_google_project, your_dataset and your_table_name

SELECT max(partition_id) as max_date,
FROM your_google_project.your_dataset.INFORMATION_SCHEMA.PARTITIONS
WHERE table_name = 'your_table_name'
and total_rows > 0
and partition_id <> '__NULL__'
© www.soinside.com 2019 - 2024. All rights reserved.