我创建了一个分区类型为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将在内部删除/删除分区?如果是这样,为什么我没有删除分区?

最佳答案

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

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

关于google-bigquery - bigquery的time_partitioning_expiration参数如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38717242/

10-10 14:40