Google bigquery How bigquery';s时间\分区\过期参数工作?

Google bigquery How bigquery';s时间\分区\过期参数工作?,google-bigquery,partitioning,Google Bigquery,Partitioning,我创建了一个分区类型为day的表,并从bq命令行工具将time\u partitioning\u expiration设置为1209600秒(14天)。我已经通过在表上运行bq show来验证设置是否正确,我可以看到 "timePartitioning": { "expirationMs": "1209600000", "type": "DAY" }, "type": "TABLE" 然而,分区中似乎有我期望已删除的数据 SELECT count(*) as

我创建了一个分区类型为day的表,并从
bq
命令行工具将time\u partitioning\u 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  

我的理解是,设置时间分区过期将在内部删除/删除分区是正确的吗?如果是这样的话,为什么在我的例子中没有删除分区?

分区的过期时间不是基于分区的日期,而是基于存储准确添加到表中的时间。因此,例如,对于分区过期14天的表,如果分区20160717的数据在20160730上被重述,那么该分区的数据将从20160730起过期14天。您可以使用以下查询验证分区中最旧数据的写入时间:

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

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

从最近的文档中:

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


参考资料:

啊,我明白了-谢谢。不过,这有点烦人,在我的例子中,我希望在过去将数据加载到分区中,但我不希望该数据在该分区日期后的固定天数(在我的例子中为14天)之后出现。当您加载数据以使用当前时间戳或分区到期的分区日期时,最好在bigquery中使用此选项。我们一直在仔细评估客户对此的反馈,以确定哪种行为是最理想的,并且一直在考虑将其改为基于分区日期而不是创建时间工作。我们将随时向您通报此方面的任何更改。是否有任何更新?是否添加了类似的功能?