ClickHouse数据生命周期管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ClickHouse数据生命周期管理相关的知识,希望对你有一定的参考价值。
参考技术A 如果将ClickHouse作为Log或Metrics这种具有明显时序特征数据的存储和分析引擎,那就需要考虑这些数据的生命周期管理,即设置数据的老化机制,如是否需要根据时间划分数据存储等级、设定数据的保留时长等。ClickHouse支持从分区、列、表等粒度对数据进行管理,如分区数据的迁移、删除,列、表的TTL设置。
热数据一般为最近几天或几周的数据,访问频率最高,通常采用SSD作为存储介质,达到存储时长后,会自动迁移至温数据区;而温数据一般为数月之内的数据,访问频次相对较低,通常采用普通机械盘作为存储介质。
对于Log或Metrics类型数据使用时间字段作为分区键和排序键,ClickHouse虽然没有提供基于时间的数据自动迁移(目前只提供基于分区大小的数据自动迁移),但可以利用其卷划分机制。
磁盘配置参数(disks标签)
策略配置参数(policies标签)
目前只能通过ALTER查询语句移动分区:
1)按照上述方式启动ClickHouse实例,并配置存储策略
查看磁盘配置:
查看策略配置:
2)创建一张MergeTree表用于测试
注意:需指定storage_policy,否则数据会写入默认存储路径中
3)写入测试数据
写入第一批数据,会创建一个分区目录:
写入第二批数据,会创建一个新的分区目录:
如果触发合并操作,会生成一个新分区目录:
注意:由多个disk组成的volume,每当生成一个新数据分区时,会依照disk定义的顺序,依次轮询写入
4)迁移数据分区到温数据区
注意:合并后尚未被清理的数据分区无法移动
可以通过物化视图同步MergeTree表中的数据到SummingMergeTree或AggregatingMergeTree表引擎中,利用既定的聚合条件得到趋势数据并存储。
注意:此处可以指定partition_id进行数据分区删除,如果partition_id是all,则无法直接删除。
在MergeTree中,可以为某个列字段或整张表设置TTL。当时间到达时,如果是列字段级别的TTL,则会删除该列的数据;如果是表级别的TTL,则会删除整张表的数据;如果同时设置了列级别和表级别的TTL,则会以先到期的那个为主。
1)列级别TTL
2)表级别TTL
注意:ClickHouse没有提供删除TTL声明的方法,但提供了控制全局TTL合并任务的启停方法:
以上是关于ClickHouse数据生命周期管理的主要内容,如果未能解决你的问题,请参考以下文章