1. ClickHouse 的ttl理解
1.TTL即Time To Live 表示数据的存活时间。在MergeTree中,可以为某个列字段或者整张表设置TTL。
2.当时间达到时,若列字段级别的TTL 则会删除这一列的数据;
3.若表级别的TTL则会删除整张表的数据;
3.若同时设置了列级别的和表级别的TTL则以先到期的为准。
4.无论列级别还是表级别的TTL,都需要依托某个Datetime或者date类型的字段,通过对这个时间字段的INTERVAL操作来表述TTL的过期时间:
2. 列级别的ttl
根据时间create 列的时间, 对id 和name 的列进行ttl 过一分钟后就将值销毁掉,
注意: int 类型销毁后值为0 String 销毁后值为空。
CREATE TABLE ttl_table_column
(
createtime DATETIME,
id INT TTL createtime + INTERVAL 1 MINUTE,
name String TTL createtime + INTERVAL 1 MINUTE,
address String
)
ENGINE = MergeTree
ORDER BY createtime ;
insert into ttl_table_column values (now(), 1, 'value1', 'ccc1');
insert into ttl_table_column values(now(), 2, 'value2', 'ccc2');
3. 表级别的ttl
CREATE TABLE ttl_table
(
createtime DateTime,
id Int,
name String,
address String
)
ENGINE = MergeTree
ORDER BY createtime
TTL createtime + INTERVAL 1 MINUTE DELETE;
-- 插入数据
insert into ttl_table values (now(), 1, 'value1', 'ccc1');
insert into ttl_table values(now(), 2, 'value2', 'ccc2');
由于MergeTree采用类似LSM tree的结构,很多存储层处理逻辑直到Compaction期间才会发生。
因此强制后台compaction执行完毕,再次查询,发现仍旧没有一条数据。
optimize table ttl_table final;
4.1 可以给表的列添加ttl
ALTER TABLE ttl_table MODIFY COLUMN name String TTL createtime + INTERVAL 1 DAY;
4.2 修改列的ttl
ALTER TABLE ttl_table MODIFY COLUMN name String TTL createtime + INTERVAL 1 MONTH;
网友评论