|NO.Z.00011|——————————|BigDataEnd|——|Hadoop&OLAP_ClickHouse.V08|——|ClickHouse.v08|表引擎|MergeTree|MergTreeTTL|
一、MergTree的TTL
### --- MergTree的TTL
~~~ TTL:time to live 数据存活时间。TTL既可以设置在表上,也可以设置在列上。
~~~ TTL指定的时间到期后则删除相应的表或列,如果同时设置了TTL,则根据先过期时间删除相应数据。
### --- 用法:
~~~ TTL time_col + INTERVAL 3 DAY
~~~ 表示数据存活时间是time_col时间的3天后
~~~ INTERVAL可以设定的时间:
~~~ SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR
二、TTL设置在列上
### --- TTL示例:
~~~ # 创建表
hadoop01 :) create table ttl_table_v1 ( id String, create_time DateTime, code String TTL create_time + INTERVAL 10 SECOND, type UInt8 TTL create_time + INTERVAL 10 SECOND ) ENGINE = MergeTree PARTITION BY toYYYYMM(create_time) ORDER BY id;
CREATE TABLE ttl_table_v1
(
`id` String,
`create_time` DateTime,
`code` String TTL create_time + toIntervalSecond(10),
`type` UInt8 TTL create_time + toIntervalSecond(10)
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(create_time)
ORDER BY id
Ok.
~~~ # 导入数据
hadoop01 :) insert into ttl_table_v1 values('A000',now(),'C1',1),('A000',now()+INTERVAL 10 MINUTE,'C1',1);
INSERT INTO ttl_table_v1 VALUES
Ok.
~~~ # 查看表
hadoop01 :) SELECT * FROM ttl_table_v1;
SELECT *
FROM ttl_table_v1
┌─id───┬─────────create_time─┬─code─┬─type─┐
│ A000 │ 2021-11-01 17:49:56 │ │ 0 │
│ A000 │ 2021-11-01 17:59:56 │ C1 │ 1 │
└──────┴─────────────────────┴──────┴──────┘
hadoop01 :) optimize table ttl_table_v1 FINAL;
OPTIMIZE TABLE ttl_table_v1 FINAL
Ok.
hadoop01 :) SELECT * FROM ttl_table_v1;
SELECT *
FROM ttl_table_v1
┌─id───┬─────────create_time─┬─code─┬─type─┐
│ A000 │ 2021-11-01 17:49:56 │ │ 0 │
│ A000 │ 2021-11-01 17:59:56 │ C1 │ 1 │
└──────┴─────────────────────┴──────┴──────┘
三、TTL设置在表上
### --- TTL设置在表上
~~~ # 创建表
hadoop01 :) create table tt1_table_v2 ( id String, create_time DateTime, code String TTL create_time + INTERVAL 10 SECOND, type UInt8 ) ENGINE = MergeTree PARTITION BY toYYYYMM(create_time) ORDER BY create_time TTL create_time + INTERVAL 1 DAY;
CREATE TABLE tt1_table_v2
(
`id` String,
`create_time` DateTime,
`code` String TTL create_time + toIntervalSecond(10),
`type` UInt8
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(create_time)
ORDER BY create_time
TTL create_time + toIntervalDay(1)
Ok.
~~~ # TTL目前没有取消方法
hadoop01 :) ALTER TABLE tt1_table_v2 MODIFY TTL create_time + INTERVAL + 3 DAY;
ALTER TABLE tt1_table_v2
MODIFY TTL create_time + toIntervalDay(3)
Ok.
四、TTL文件说明
### --- TTL文件说明
~~~ 一列数据中最小时间:2021-11-01 17:49:56 + INTERVAL的10秒钟 = 2021-11-01 17:49:56
~~~ 时间戳:"min":1597839121一列数据中最大时间
~~~ 2021-11-01 17:59:56 + INTERVAL的10秒钟 = 2021-11-01 17:59:56
~~~ 时间戳:"max":1597839721文件ttl.txt记录的是列字段的过期时间。
[root@hadoop01 ~]# cd /var/lib/clickhouse/data/default/ttl_table_v1/202111_1_1_0/
[root@hadoop01 202111_1_1_0]# cat ttl.txt
ttl format version: 1
{"columns":[{"name":"code","min":1635760206,"max":1635760806},{"name":"type","min":1635760206,"max":1635760806}]}
hadoop01 :) SELECT toDateTime(1635760206) AS ttl_min, toDateTime(1635760806) AS ttl_max;
SELECT
toDateTime(1635760206) AS ttl_min,
toDateTime(1635760806) AS ttl_max
┌─────────────ttl_min─┬─────────────ttl_max─┐
│ 2021-11-01 17:50:06 │ 2021-11-01 18:00:06 │
└─────────────────────┴─────────────────────┘
hadoop01 :) SELECT * FROM ttl_table_v1 ;
SELECT *
FROM ttl_table_v1
┌─id───┬─────────create_time─┬─code─┬─type─┐
│ A000 │ 2021-11-01 17:49:56 │ │ 0 │
│ A000 │ 2021-11-01 17:59:56 │ C1 │ 1 │
└──────┴─────────────────────┴──────┴──────┘
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通