ClickHouse 八(TTL 时效性)

什么是TTL?

TTL的意思是Time To Live表示数据的存活时间。由于数据的价值会根据保存的时间成反比,出于存储成本的考虑通常只会保留近一年的数据。而在MergeTree (合并树)引擎中,可以通过设置TTL来轻松管理数据的存活时间,使数据的价值最大化。当然数仓的数据是不会删除的,不过会部分业务不需要旧数据,比如用户的画像数据,用户画像是按天按小时更新甚至实时更新,比较旧画像数据继续保存着没价值则需要删除。

在ClickHouse 中,TTL可以设置值的生命周期,它既可以为整张表设置,也可以为每个列字段单独设置。表级别的 TTL 还会指定数据在磁盘和卷上自动转移的逻辑。TTL 表达式的计算结果必须是 日期(date) 或 日期时间(datetime),如果同时设置了列级别的和表级别的TTL则以先到期的为准。

字段级别TTL

当列字段中的值过期时, ClickHouse会将它们替换成数据类型的默认值。如果分区内,某一列的所有值均已过期,ClickHouse会从文件系统中删除此列。ClickHouse的INTERVAL(数据时间间隔)支持的操作有:second(秒),minute(分钟),hour(小时),day(日),week(周),month(月),quarter(季度),year(年)。

示例:

# 创建时指定 TTL
CREATE TABLE example_table
(
    d DateTime,
    a Int TTL d + INTERVAL 1 day,
    b Int TTL d + INTERVAL 1 day,
    c String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(d)
ORDER BY d;
# 为表中已存在的列字段添加 TTL
ALTER TABLE example_table
    MODIFY COLUMN `c` String TTL d + toIntervalDay(1)
# 修改列字段的 TTL
ALTER TABLE example_table
    MODIFY COLUMN
    c String TTL d + INTERVAL 1 WEEK;

表级别TTL

表可以设置一个用于移除过期行的表达式,以及多个用于在磁盘或卷上自动转移数据片段的表达式。当表中的行过期时,ClickHouse 会删除所有对应的行。

示例:event_date超过一个月的数据自动删除

# 创建时指定 TTL
CREATE TABLE example_table
(
    `event_date` Date,
    `uid` Int32,
    `name` String
)
ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/{shard}/example_table', '{replica}')
PARTITION BY event_date
ORDER BY uid
TTL event_date + toIntervalMonth(1)
SETTINGS index_granularity = 128;
# 修改表的 TTL,event_date超过三个月的数据自动删除
ALTER TABLE example_table
    MODIFY TTL event_date + toIntervalMonth(3);

创作不易,喜欢的话可以点赞加关注哦!阿里嘎多民那桑!

参考文章:clickhouse官方文档

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高并发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值