我已经创建了一个分区类型日期的表,并通过time_partitioning_expiration命令行工具将bq设置为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将在内部删除/删除分区吗?如果是的话,为什么在我的例子中没有删除分区呢?
发布于 2016-08-03 20:46:08
分区的过期不是基于分区的日期,而是基于将存储准确地添加到表的时间。因此,例如,对于分区过期时间为14天的表,如果在20160730上重述分区20160717的数据,则该分区的数据将从20160730到期。可以使用以下查询验证分区中最古老数据的写入时间:
SELECT MSEC_TO_TIMESTAMP(creation_time) from [project:dataset.table$__PARTITIONS_SUMMARY__]发布于 2017-12-11 14:19:15
看起来在2016年12月13日,Pavan的回答中描述的行为发生了变化,到期时间现在是基于分区日期,而不是最后修改的日期。
来自最近的文档:
例如,如果分区过期设置为60天,且数据在2017年1月30日写入分区20170101,则数据将于2017年1月1日+ 60天过期。
参考资料:BQ分区表
https://stackoverflow.com/questions/38717242
复制相似问题