bigquery的time_partitioning_expiration参数有多大?

时间:2016-08-02 09:55:29

标签: google-bigquery partitioning

我创建了一个分区类型为day的表,并且我已经从bq命令行工具将time_partitioning_expiration设置为1209600秒(14天)。我已经通过在桌面上运行bq show来验证设置是否正确,我可以看到

"timePartitioning": {
    "expirationMs": "1209600000", 
    "type": "DAY"
  }, 
  "type": "TABLE"

但是,我希望删除分区中的数据。

SELECT 
  count(*) as c,
  _partitiontime as pDate
FROM [poc.reporting]
group by pDate
; 

1   373800  2016-07-17 00:00:00 UTC  
2   640800  2016-07-18 00:00:00 UTC  
3   373800  2016-07-16 00:00:00 UTC  

我的理解是设置time_partition_expiration会在内部删除/删除分区是否正确?如果是这样,为什么我的案例中没有删除分区?

2 个答案:

答案 0 :(得分:4)

看起来Pavan的最佳答案中描述的行为在2016年12月13日发生了变化,过期时间现在基于分区日期,而不是最后修改日期。

来自最新的文档:

  

例如,如果分区到期时间设置为60天且数据为   2017年1月30日写入分区20170101,然后是数据   2017年1月1日到期+ 60天后到期。

参考:BQ Partitioned Tables

答案 1 :(得分:3)

分区的过期不是基于分区的日期,而是基于存储完全添加到表中的时间。因此,例如,对于分区有效期为14天的表,如果20160730上重新分配了分区20160717的数据,则该分区的数据将从20160730到期14天到期。您可以验证最旧数据的写入时间在分区中使用以下查询:

SELECT MSEC_TO_TIMESTAMP(creation_time) from [project:dataset.table$__PARTITIONS_SUMMARY__]