什么是TTL? TTL的意思是Time To Live表示数据的生存时间。 由于数据的价值与保留期成反比,因此从存储成本的角度来看,通常只能保留将近一年的数据。 在MergeTree引擎中,通过设置TTL可以轻松管理数据的生存时间,使数据的价值最大化。 当然,不会删除几仓的数据,但有些业务不需要旧数据。 例如,用户的图像数据中,用户的图像每天每小时更新,或者实时更新。 如果不值得继续保存旧的图像数据,就需要删除。
在ClickHouse中,TTL可以设置值的生命周期。 TTL可以在整个表中设置,也可以在每个列字段中单独设置。 表级TTL还指定了自动将数据传输到磁盘和卷的逻辑。 TTL表达式的计算结果必须是日期(date )或日期/时间,如果同时设置了列级TTL和表级TTL,则基于先前过期的TTL。
字段级TTL列字段的值过期时,ClickHouse将使用数据类型的默认值替换。 如果分区中列的所有值都已过期,ClickHouse将从文件系统中删除该列。 ClickHouse的间隔(数据时间间隔)支持的操作包括second (秒)、minute (分钟)、hour (小时)、day (天)、week (周)、month (月)、que (月)
例如:
#创建时使用ttlcreatetableexample _ table (d datetime,a Int TTL d INTERVAL 1 day,b Int TTL d INTERVAL 1 day, c String )指定engine=mergetreeepaaaay的# ttlaltertableexample _ tablemodifycolumn ` c ` 更改stringTTLdtointervalday(1)列字段中ttlaltertableexample _ tablemooday的表级TTL表包含删除旧行的表达式以及磁盘或卷上的数据表中的行过期后,ClickHouse会删除所有对应的行。
示例:自动删除event_date超过一个月的数据
#创建时使用ttlcreatetableexample _ table (event _ date ` date,` uid` Int32, ` name ` string (engine=replicatedaggregatingmergetree (/click house/tables/{ shard }/example _ table ), ' { replica } ' (partitionbyevent _ dateorderbyuidttlevent _ datetointervalmonth (1) SETTINGS index_granularity=128; #修改表中的TTL,event_date超过3个月的数据自动更新为altertableexample _ tablemodifyttlevent _ datetointervalmonth (3); 创作很难,喜欢的话请夸奖关注哦! 阿里加德,各位!
参考文章: clickhouse官方文档