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

时间:2019-01-24 23:47:05

标签: google-bigquery

我在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?

  • 方法1:

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

  • 方法2:

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 个答案:

答案 0 :(得分:0)

方法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'

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