在 bigquery 分区表中修剪(限制)分区

Posted

技术标签:

【中文标题】在 bigquery 分区表中修剪(限制)分区【英文标题】:Pruning (limiting) partitions in bigquery partitioned tables 【发布时间】:2019-01-24 23:47:04 【问题描述】:

我在 BigQuery 中创建了一个分区表,如下所示:

 CREATE TABLE IF NOT EXISTS ` my_project . my_dataset .my_table`
(
dt TIMESTAMP
, other_fields
)
PARTITION BY DATE(dt)
OPTIONS(
partition_expiration_days=180
)
分区:DAY 分区字段:dt(类型:TIMESTAMP)

如您所见,分区字段是TIMESTAMP,但我想通过DAY 而不是TIMESTAMP 进行分区。那么修剪分区的正确方法是什么?我可以像方法 1 一样将分区字段转换为 DATE 还是必须使用方法 2?

方法一:

SELECT COUNT(*) FROM `my_project.my_dataset.my_table` WHERE CAST(dt AS DATE) = "2019-01-01"

方法二:

SELECT COUNT(*) FROM `my_project.my_dataset.my_table` WHERE dt >= "2019-01-01 00:00:00" AND dt < "2019-01-02 00:00:00"

【问题讨论】:

【参考方案1】:

方法 1 不起作用,因为 BigQuery SQL 不支持 CAST() 函数中的 DATE 数据类型

方法 2 应该可以工作,但是您也可以使用 FORMAT_DATE() 函数删除 TIMSTAMP HH:MM:SS,然后只需传入“YYYY/MM/DD”序列即可。

如果您的表是使用表后缀构成的,另一个选择是使用 _TABLE_SUFFIX

WHERE _TABLE_SUFFIX >= '2019-01-01'
AND _TABLE_SUFFIX <= '2019-01-15'

希望这些选项之一对您有所帮助

【讨论】:

方法 1 确实有效。尽管标准 SQL bigquery 文档没有显示 CAST() 支持 DATE 作为数据类型,但 CAST() 函数确实接受 DATE 并将变量转换为 DATE 对象

以上是关于在 bigquery 分区表中修剪(限制)分区的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 中使用连接修剪分区?

使用 Data Studio 修剪 BigQuery 分区

JavaScript 中的 BigQuery 用户定义函数不会修剪分区

BigQuery 重复数据删除和分区表

Bigquery:分区数据超过 2000 限制(更新:现在 4000 限制)[重复]

bigquery 表可以创建的最大分区数