BigQuery 中 Hive 的显示分区的替代方案

Posted

技术标签:

【中文标题】BigQuery 中 Hive 的显示分区的替代方案【英文标题】:Alternative of show partitions of Hive in BigQuery 【发布时间】:2020-11-19 13:51:45 【问题描述】:

我有一个要求,我在 BigQuery(每小时分区)中有一个分区表,我必须编写一个批处理作业,一次处理一个分区。

在 hive 中,它很容易做到这一点,就像我可以在主表和一个元数据表中显示分区,我可以在其中维护已处理的分区,然后在两个数据集之间创建差异,使用 except 来识别剩余的分区过程。

我正在 BigQuery 中查看此内容,我可以在其中执行类似的操作以在主表上显示分区并维护一个元数据表,我可以在其中维护已处理的分区。

我发现我可以在主表上做到这一点

SELECT DISTINCT FORMAT_DATETIME('%Y-%m-%d %H:%M:%S', EXTRACT(DATETIME FROM _PARTITIONTIME)) FROM DATASET.TABLE_NAME

但是这会扫描整个表和开销上的开销。

【问题讨论】:

【参考方案1】:

使用旧版 sql,您可以运行以下命令:

#legacySQL
SELECT 
partition_id
FROM [project_id:dataset.table$__PARTITIONS_SUMMARY__]

在partition summary table上查看其他文档

【讨论】:

有没有其他方法可以获取分区信息?同样要执行此操作,我们需要使用 QueryJobConfiguration。我们可以执行此查询并获取分区信息的任何其他方式,就像我们可以在 hive 中一样。 #legacySQL 将允许您不必更新 QueryJobConfiguration bq query \ '#legacySQL SELECT partition_id FROM [bigquery-public-data:wikipedia.pageviews_2015$__PARTITIONS_SUMMARY__]' 基本上,我想通过 Java 代码执行此操作。因此检查除了 QueryJobConfiguration 是否还有其他方法。

以上是关于BigQuery 中 Hive 的显示分区的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

创建按一/多列分区的 BigQuery 外部表

我们可以像在 Hive 中一样在 Big Query 中创建动态分区吗?

在 Bigquery 中的分区表上插入查询

BigQuery 表分区

使用 python 将历史数据从谷歌云存储移动到日期分区的 bigquery 表

从 Hive 查询时,分区表中的数据不显示