我创建了一个分区类型为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会在内部删除/删除分区是否正确?如果是这样,为什么我的案例中没有删除分区?
答案 0 :(得分:4)
看起来Pavan的最佳答案中描述的行为在2016年12月13日发生了变化,过期时间现在基于分区日期,而不是最后修改日期。
来自最新的文档:
例如,如果分区到期时间设置为60天且数据为 2017年1月30日写入分区20170101,然后是数据 2017年1月1日到期+ 60天后到期。
答案 1 :(得分:3)
分区的过期不是基于分区的日期,而是基于存储完全添加到表中的时间。因此,例如,对于分区有效期为14天的表,如果20160730上重新分配了分区20160717的数据,则该分区的数据将从20160730到期14天到期。您可以验证最旧数据的写入时间在分区中使用以下查询:
SELECT MSEC_TO_TIMESTAMP(creation_time) from [project:dataset.table$__PARTITIONS_SUMMARY__]