为加快股权投资管理机构落户,武汉出台多项扶持政策
06-18
TTL 深入理解TTL就是Time To Live,表示数据存活的时间。在MergeTree中,您可以为列字段或整个表设置TTL。
当时间到达时,如果是列字段级别TTL,则删除该列的数据;如果是表级TTL,则删除整个表的数据;如果列级和表级TTL都设置了,那么先过期的优先。无论是列级还是表级TTL,都需要依赖一个DataTime或者Date类型的字段,通过对该时间字段的INTERVAL操作来描述TTL的过期时间。
例如: 代码语言:javascript copy TTL time_col + INTERVAL 3 上面的DAY语句表示数据的生存时间是time_col时间后的3天。代码语言:javascript copy TTL time_col + INTERVAL 1 MONTH 上面的语句表示数据的生存时间是time_col时间之后的1个月。
INTERVAL 完整操作包括:SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR。 1.列级TTL 如果要设置列级TTL,请在声明表字段时为其声明TTL表达式。
主键字段不能声明 TTL。例如:代码语言:javascript copy #创建表t_mt2,指定性别生存时间node1:) CREATE TABLE t_mt2(id UInt8, name String,age UInt8,gender String TTL create_time+INTERVAL 10 SECOND, create_time DateTime)engine=MergeTreeorder by id ;注:上述性别字段的生存时间是根据create_time的值向后延伸10秒,这个ttl是借助create_time时间字段来实现的。
#将以下数据node1插入表t_mt2:) insert into t_mt2values(1,'zs',18,'f',now());注意:10s后,正常情况下我们可以直接执行optimize table t_mt2的final语句,查看表中的结果,发现gender列下的数据变成了string类型的空。然而,这个ClickHouse版本有bug。
需要重启ClickHouse,然后执行优化表t_mt2最终语句才能看到效果。经过测试,之前的版本不存在这个问题。
#重启ClickHouse后,执行以下语句查看对应表node1中的数据:) Optimize table t_mt2 Final;node1:) select * from t_mt2;如果要修改列字段对的 TTL,或者为现有字段添加 TTL,则可以使用 ALTER 语句,如下所示: 代码语言:javascript copy ALTER TABLE tbl MODIFY COLUMN col type TTL col_time + INTERVAL 1 DAY 。示例如下: 代码语言:javascript copy #到表t_mt2中的age列,指定ttl过期时间为5snode1:) alter table t_mt2修改列age UInt8 ttl create_time+interval 5秒;#查看t_mt2建表语句, Age列ttl生效node1:) show create table t_mt2; 2.表级别TTL 在ClickHouse中我们还可以设置整个表的TTL,需要在创建表时在表参数中指定TTL表达式。
当TTL被触发时,满足过期时间的整个数据行将被删除。示例: 代码语言: javascript copy#创建表 t_mt3,表级指定 TTL,数据 10 秒后过期 CREATE TABLE t_mt3(id UInt8, name String, Age UInt8,ender String, create_time DateTime)engine=MergeTreeorder by idTTL create_time+INTERVAL 10第二; #将以下数据node1插入表t_mt3:) insert into t_mt3values(1,'zs',18,'f',now()); #10s后,执行optimize table t_mt3 Final,再次查看表中数据已被删除 Clear node1 :) Optimize table t_mt3 Final;我们还可以修改表级别的TTL。
修改方法如下: 代码语言:javascript copy ALTER TABLE tbl MODIFY TTL create_time +INTERVAL 3 DAY。例如: 代码语言:javascript copy #修改 table t_mt3 数据过期时间为 1 分钟 node1:) alter table t_mt3 modify ttl create_time + Interval 1 分钟; #查看t_mt3表的TTLnode1:) show create table t_mt3;代码语言:javascript copy #将以下数据插入表t_mt3 node1:) insert into t_mt3 values(1,'zs',18,'f',now());#1分钟后,优化表t_mt3 Final执行完毕,数据被清除node1:)optimize table t_mt3 Final;注意:不管列级TTL,仍然是表级TTL。
一旦设置,目前无法取消。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-18
06-06
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用