功能介绍
集群实例的数据量太多的情况下,为了节省成本,希望把部分冷数据存放到 COS 盘,热数据还是放到云数据仓库 ClickHouse 的本地盘,这样既可以满足云数据仓库 ClickHouse 数据查询性能,又能降低数据存储成本。
名词说明
热数据:访问频次较高或创建时间较近的数据,仍以集群创建时所选的云硬盘或本地盘为存储载体,支持数据高效访问。
冷数据:数据使用频次较低,可存储在冷数据盘即可降低数据的存储开销又可满足数据访问的需求。
冷热数据分层存储提供了三种数据移动方法,移动顺序是先移动满足TTL策略的PART,如果存储容量还超过界限,优先移动大PART,具体如下:
存储容量策略:将新写入的数据存储在热数据盘中,提供高效查询。当热数据存储量达到业务使用阈值时,自动将热数据盘的数据移动到冷数据盘存储,从而释放热数据盘存储空间。
TTL分层存储策略:在默认存储策略基础上,添加TTL语句,实现将间隔时间之前的所有数据自动转移到冷数据盘中。
手动方式将数据在冷热之间移动。
注意事项
该功能适用于云数据仓库 ClickHouse 21.3.9.83及以上版本。对于不支持的版本,可以先升级至21.3.9.83及以上版本的实例,再进行冷热数据分层存储。
开启冷热数据分层存储服务过程中,集群会进行重启,重启过程中集群不可访问。
如果要使用冷热数据分层存储功能,必须在建表时添加 SETTINGS storage_policy = 'hot_to_cold'; 语句指定存储策略或动态修改表的存储策略,修改之前存储策略必须为default。
存储策略一旦指定,后期无法更改。
冷热数据分层存储功能开通后,暂不支持关闭。
因网络限制、冷热分层存储仅支持配置与集群同地域的 COS 盘,请准备同地域 COS 存储桶。
操作步骤
1. 登录 [云数据仓库 ClickHouse 控制台](https://console.tencentcloud.com/cdwch),创建集群时,在冷热分层配置中开启冷备存储,并选择已经创建好的 COS 盘(同地域 COS 盘需同账户自主购买)。
集群策略默认数据达到90%后,会自动触发冷数据分层机制,按 Data Part 的大小,优先将大的 Data Part 从本地盘转移到配置的 COS 盘上,直到数据量低于阈值。可按照实际需要配置冷热分层数据表,具体配置指令如下:ALTER TABLE xx MODIFY SETTINGS storage_policy = 'hot_to_cold'
。
2. 若集群创建时未开启冷热分层服务,可在集群创建成功后,可在集群列表选择操作 > 更多 > 配置冷热分层存储中开启服务。
3. 配置好冷热分层后,可通过集群详情页查看或调整热数据分层系数。
4. 已触发冷热分层的可以登录 对象存储控制台,进入 COS 桶详情页,查询相关冷数据文件。
冷热分离数据移动方式
1. 开通冷热分层存储功能后,默认存储策略的相关参数如下表所示。
|
move_factor | 当热数据盘中的可用存储空间所占比例小于该参数时,自动将最早写入热数据盘的数据移动到冷数据盘存储。取值范围为大于0,小于等于1的浮点值。默认值为0.1,代表可用存储空间所占比例小于10%时,将自动进行数据移动。可以通过网页冷热分层策略进行修改。 |
prefer_not_to_merge | 冷数据盘中的数据是否进行合并。取值范围如下: true:不合并。false:合并,默认值。 |
max_data_part_size | volume 的最大 part 大小。当热盘 part 超过对应界限会移动到冷盘。默认值为0(不限制大小)。 |
2. 设置 TTL 分层存储策略。
在默认存储策略的基础上,添加 TTL 语句,实现将间隔时间之前的所有数据自动转移到冷数据盘中。通过设置表级别 TTL 可以设置 Part 过期时间,对数据进行迁移,表达式的计算结果必须为 Date 或 DateTime 数据类型。需要依托某个 Datetime 或者 date 类型的字段,通过对这个时间字段的 INTERVAL 操作来表述 TTL 的过期时间。对于 Part 移动特征, Part 的所有行必须满足移动表达式标准。
您可以参考如下语法添加 TTL 语句。可以将 TTL 设置为 TO DISK 'cold_disk'或者 TO VOLUME 'cold',效果相同,其中的名字可以通过 system.disks 和 system.storage_policies 系统表进行查看。
TTL
+ INTERVAL
TO DISK 'cold_disk'
参数说明
|
time_column | 日期或日期时间类型的列。 |
number | 间隔时间。常用单位有:Day、Week、Month、Year。 |
示例以date列为依据,将90天之前的所有数据移动到冷数据盘。建表语句如下。```CREATE TABLE ttl_test_tbl( `f1` String, `f2` String, `f3` Int64, `f4` Float64, `date` Date)ENGINE = MergeTree()PARTITION BY dateORDER BY f1TTL date + INTERVAL 90 DAY TO DISK 'cold_disk'SETTINGS storage_policy = 'hot_to_cold';```
更改 TTL 分层存储策略
您可以更改 TTL 分层存储策略的日期或日期时间类型的列以及间隔时间。
说明:
默认情况下,更改 TTL 分层存储策略后存量数据和新增数据全部按照新策略进行存储。
如果您不想更改存量数据的 TTL 分层存储策略,可以在更改 TTL 分层存储策略之前,执行 set materialize_ttl_after_modify=0; 语句。执行成功后,再更改 TTL 分层存储策略。存量数据按照原有策略进行存储,不发生改变。只有新增数据按照新策略进行存储。
更改 TTL 分层存储策略后,已经进入冷数据盘中的数据不会自动移动到热数据盘,可以进行手动移动。
您可以参考如下语法更改TTL分层存储策略。
ALTER TABLE
MODIFY TTL
+ INTERVAL
TO DISK 'cold_disk';
参数说明
|
table_name | 表名。 |
time_column | 更改后的日期或日期时间类型的列。 |
number | 更改后的间隔时间。常用单位有:Day、Week、Month、Year。 |
3. 移动冷热数据盘的数据。
移动前查看当前 part 或 partition 所处位置:
select partition,name,table,disk_name,database from system.parts where active=1
找到需要移动的 part 和 partition 进行移动,语法如下:
ALTER TABLE table_name MOVE PART|PARTITION partition_expr TO VOLUME ' volume_name’;
移动热数据盘数据到冷数据盘。
ALTER TABLE
MOVE PARTITION <partition>
TO DISK 'cold_disk'; ALTER TABLE
MOVE PARTITION <partition>
TO VOLUME 'cold';
移动冷数据盘数据到热数据盘。
ALTER TABLE
ON CLUSTER default MOVE PARTITION
TO DISK 'default'; ALTER TABLE
ON CLUSTER default MOVE PARTITION
TO VOLUME 'hot';
使用中可能存在的问题
1. 冷热分层后数据会先将数据写到热盘,如果一次批量导入数据超过热盘剩余容量,可能会出现磁盘没有剩余空间的报错。
2. 内核21.6之后才支持 COS 连接的重试机制,之前的版本如果使用 join 等耗时较长的操作可能会出现以下报错。原因是 ClickHouse 与 COS 建立连接后读取文件超出一定时间,可以调整 sql 语句或升级处理。
本页内容是否解决了您的问题?