在 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 分区表中修剪(限制)分区的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 中的 BigQuery 用户定义函数不会修剪分区