BigQuery中能否为表记录设置TTL自动过期删除规则?
问题解答
1. 是否支持为BigQuery列设置存活时间(TTL)?
BigQuery目前不支持为单个列设置存活时间(TTL),现有的TTL能力仅覆盖三个维度:表级TTL(整表到期自动删除)、分区级TTL(分区到期自动删除该分区所有数据)、行级TTL(符合条件的行到期自动删除)。如果有列到期自动删除的需求,目前只能通过定时调度查询任务执行ALTER TABLE DROP COLUMN命令实现。
2. 是否支持按timestamp字段自动删除90天前的对应记录?
完全支持,该场景可以直接使用BigQuery的行级TTL功能实现,无需额外编写定时删除任务。
配置方法
你可以通过DDL命令快速为payment_details表配置行级TTL,假设用来判断过期的时间字段名为timestamp,配置语句如下:
-- 给已有表添加行级TTL规则 ALTER TABLE `你的项目ID.你的数据集ID.payment_details` ADD ROW RETENTION POLICY OPTIONS ( ttl_filter_column = 'timestamp', ttl_expiration_after_days = 90 );
如果是创建新表时直接配置,语法如下:
CREATE TABLE `你的项目ID.你的数据集ID.payment_details` ( -- 其他字段定义 timestamp TIMESTAMP NOT NULL, amount FLOAT64, order_id STRING ) OPTIONS ( ttl_filter_column = 'timestamp', ttl_expiration_after_days = 90 );
补充说明
- 行级TTL的删除操作是BigQuery后台异步执行的,规则配置完成后不需要手动操作,过期数据一般会在24小时内被自动清理,清理过程不消耗你的查询配额。
- 行级TTL可以和表级、分区级TTL同时生效,多条规则同时存在时,数据会按最早的过期时间被清理。
- 如果你的过期判断逻辑更复杂(不是简单的时间字段加90天),也可以自定义
ttl_filter参数实现定制化的过期过滤规则。
内容的提问来源于stack exchange,提问作者Bhawna Joshi
相关产品推荐
相关产品推荐

