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

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别