如何为ClickHouse现有表扩展存储至新增挂载磁盘
ClickHouse表扩展存储:让新数据写入新增磁盘
前提确认
先确认新增磁盘已被ClickHouse识别,执行以下查询获取磁盘名称:
SELECT name, path FROM system.disks;
记录新增磁盘的name(例如new_disk)。
1. 配置存储策略
ClickHouse通过**存储策略(Storage Policy)**控制数据存储位置,需修改ClickHouse配置文件(可在/etc/clickhouse-server/config.d/下新增自定义配置文件,或修改主config.xml):
<storage_configuration> <policies> <!-- 自定义策略名称,例如new_data_policy --> <new_data_policy> <volumes> <!-- 指定新增磁盘作为优先写入的存储卷 --> <new_disk_volume> <disk>new_disk</disk> <!-- 替换为你查到的新增磁盘name --> </new_disk_volume> <!-- 可选:保留原有磁盘作为 fallback,当新磁盘空间不足时使用 --> <old_disk_volume> <disk>default</disk> <!-- 原有磁盘name --> </old_disk_volume> </volumes> <!-- 可选:磁盘剩余空间低于10%时触发数据迁移,按需调整 --> <move_factor>0.1</move_factor> </new_data_policy> </policies> </storage_configuration>
修改后重启ClickHouse服务生效:
sudo systemctl restart clickhouse-server
2. 为目标表绑定存储策略
执行ALTER TABLE语句,将目标表的存储策略设置为刚创建的策略:
ALTER TABLE your_table_name MODIFY SETTING storage_policy = 'new_data_policy';
替换your_table_name为实际表名。
3. 验证配置效果
- 确认表的存储策略已生效:
SELECT name, value FROM system.table_settings WHERE name = 'storage_policy' AND database = 'your_database_name' AND table = 'your_table_name';
- 插入测试数据后,查看新分区的存储磁盘:
SELECT partition, disk_name FROM system.parts WHERE table = 'your_table_name' AND active = 1 ORDER BY modification_time DESC LIMIT 10;
新生成的分区应显示在新增磁盘上。
补充说明
- 仅对MergeTree系列引擎的表生效(绝大多数生产场景使用该引擎),新写入/合并生成的分区会自动使用新策略;
- 若需迁移现有旧数据到新磁盘,可使用
ALTER TABLE ... MOVE PARTITION语句逐个迁移分区,或使用clickhouse-copier工具批量迁移。
内容的提问来源于stack exchange,提问作者Marat_Galiev
相关产品推荐
相关产品推荐

