有没有办法使用 bigquery API 删除分区表中的旧分区?
Posted
技术标签:
【中文标题】有没有办法使用 bigquery API 删除分区表中的旧分区?【英文标题】:Is there a way of deleting old partitions in a partitioned table using bigquery API? 【发布时间】:2016-12-11 15:24:37 【问题描述】:我有一个每日分区表,我想通过 API 删除旧分区。
文档只说 3 个月未更新的旧分区以 50% 的折扣存储。感谢 Google,但我真的不打算将这些数据保留半个世纪。
我认为分区表的全部意义在于允许删除旧数据,但我发现的只是折扣。有没有办法做到这一点?
【问题讨论】:
我也在等待这个功能。尚不支持修改分区表的 DML 语句。 cloud.google.com/bigquery/docs/reference/standard-sql/… 【参考方案1】:您可以使用Tables: delete API 通过将分区指定为 yourTable$YYYYMMDD 来删除表的特定分区
您可以使用timePartitioning.expirationMs 属性来设置Number of milliseconds for which to keep the storage for a partition
。您可以在通过Tables: insert API 创建表时设置此属性,也可以通过Tables: patch API 修补现有表
【讨论】:
通过 yourTable$YYYYMMDD 删除表在通过 select * from [datawarehouse:dev.temps$__PARTITIONS_SUMMARY__] 访问时似乎不会更新表的分区列表 是的。这可能是要报告给 BigQuery 团队的错误。同时,实际表在某种意义上被更新,已删除分区中不再有行,因此没有成本。您可以通过以下方式进行检查:SELECT _PARTITIONTIME AS partition_id, COUNT(1) FROM [datawarehouse:dev.temps] 还要注意,删除分区时,包含该分区的缓存查询不会失效;见code.google.com/p/google-bigquery/issues/detail?id=894以上是关于有没有办法使用 bigquery API 删除分区表中的旧分区?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用预编译的 sql 完成工作并通过 java api (bigquery) 多次运行
使用 Python 和 API 创建 Bigquery 分区表