使用 require_partition_filter 列出 BigQuery 分区表中的所有分区

Posted

技术标签:

【中文标题】使用 require_partition_filter 列出 BigQuery 分区表中的所有分区【英文标题】:Listing all the partitions from BigQuery partitioned table with require_partition_filter 【发布时间】:2019-04-15 13:30:13 【问题描述】:

我正在尝试找到一种方法来列出使用require_partition_filter = true 创建的表的分区,但是我还没有找到方法。

这是建表脚本

CREATE TABLE mydataset.partitionedtable_partitiontime
(
x INT64 \
)
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
require_partition_filter = true
);

一些测试行

INSERT INTO mydataset.partitionedtable_partitiontime (_PARTITIONTIME, x) SELECT TIMESTAMP("2017-05-01"), 10;
INSERT INTO mydataset.partitionedtable_partitiontime (_PARTITIONTIME, x) SELECT TIMESTAMP("2017-04-01"), 20;
INSERT INTO mydataset.partitionedtable_partitiontime (_PARTITIONTIME, x) SELECT TIMESTAMP("2017-03-01"), 30;

正如预期的那样,如果尝试以下查询来获取分区,我会收到一个错误,因为我需要在分区列的顶部使用过滤器

SELECT _PARTITIONTIME as pt, FORMAT_TIMESTAMP("%Y%m%d", _PARTITIONTIME) as partition_id
FROM `mydataset.partitionedtable_partitiontime`
GROUP BY _PARTITIONTIME
ORDER BY _PARTITIONTIME

错误

Cannot query over table 'mydataset.partitionedtable_partitiontime' without a filter over column(s) '_PARTITION_LOAD_TIME', '_PARTITIONDATE', '_PARTITIONTIME' that can be used for partition elimination

任何想法如何列出分区?

编辑:我知道可以添加过滤器,但我正在寻找像 Hive 的“SHOW PARTITIONS TABLENAME”这样的解决方案来列出所有分区(本质上是元数据)

谢谢!

【问题讨论】:

【参考方案1】:

方法如下:

SELECT * FROM `mydataset.partitionedtable_partitiontime$__PARTITIONS_SUMMARY__`

bigquery.jobs.create 权限是必需的。

编辑:现在可以使用标准 SQL 获取此信息:

SELECT * FROM `myproject.mydataset.INFORMATION_SCHEMA.PARTITIONS`
WHERE table_name = 'partitionedtable'

【讨论】:

已编辑以更清楚地表明标准 SQL 查询只需要表名(如果您要添加该名称,则名称中只会包含分区时间)。【参考方案2】:

如hlagos 所述,如果您使用标准SQL,您可以通过查询_PARTITIONTIME 伪列或__PARTITIONS_SUMMARY__ 元表来获取此数据旧版 SQL

您可以查看this GCP documentation,其中包含有关此分区表元数据使用情况的详细信息。

【讨论】:

以上是关于使用 require_partition_filter 列出 BigQuery 分区表中的所有分区的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份