MergeTree 转换为 ReplicatedMergeTree 官方路径 数据副本 | ClickHouse Docs
我们使用 MergeTree 来表示 MergeTree系列 中的所有表引擎,ReplicatedMergeTree 同理。

如果你有一个手动同步的 MergeTree 表,您可以将其转换为可复制表。如果你已经在 MergeTree 表中收集了大量数据,并且现在要启用复制,则可以执行这些操作。

如果各个副本上的数据不一致,则首先对其进行同步,或者除保留的一个副本外,删除其他所有副本上的数据。

重命名现有的 MergeTree 表,然后使用旧名称创建 ReplicatedMergeTree 表。 将数据从旧表移动到新表(/var/lib/clickhouse/data/db_name/table_name/)目录内的 ‘detached’ 目录中。 然后在其中一个副本上运行ALTER TABLE ATTACH PARTITION,将这些数据片段添加到工作集中。

简单例子
样例表dwd_testsadf broad_temp
1,创建新的本地表和分布式表(表结构和dwd_testsadf broad_temp一致)
– 本地表
CREATE TABLE IF NOT EXISTS dw.dwd_testsadf broad_temp_local ON CLUSTER everdc_ck_cluster( msisdn String COMMENT ‘’, dest_ip String COMMENT ‘目的IP’, ipCountry String COMMENT ‘国家’, ipcon String COMMENT ‘’ )ENGINE = ReplicatedMergeTree( ‘/clickhouse/tables/{shard}/dw/dwd_testsadf broad_temp_local’, ‘{replica}’) ORDER BY ( msisdn);
– 分布式表
CREATE TABLE IF NOT EXISTS dw.dwd_testsadf broad_temp_dist ON CLUSTER everdc_ck_cluster( msisdn String COMMENT ‘’, dest_ip String COMMENT ‘目的IP’, ipCountry String COMMENT ‘国家’, ipcon String COMMENT ‘’)ENGINE = Distributed( ‘ali_ck_cluster’, ‘dw’, ‘dwd_testsadf broad_temp_local’, rand() );
2,停止单机表入库程序(保留数据总数记录)
3,备份单机表数据
select data_paths,metadata_path from system.tables where name=‘dwd_testsadf broad_temp’ and database=‘dw’
将这两个路径下的数据放到备份目录下

4,将旧表dwd_testsadf broad_temp重命名
rename table dwd_testsadf broad_temp to dwd_testsadf broad_temp_old;

5, 数据量导入

将单机表数据导入新集群表
insert into dwd_testsadf_broad_temp_dist select * from dwd_testsadf broad_temp;

6,将分布式表名更新为旧表名
rename table dwd_testsadf broad_temp_dist to dwd_testsadf broad_temp on cluster everdc_ck_cluster
7,验证集群表的数据量

温馨提示:
如果两张表建表语句一样,都是本地表,那表的select data_paths,metadata_path from system.tables where name=‘dwd_testsadf broad_temp’ and database='dw’这个data_pths下的文件是通用的,可以复制A表的到标下,但是要重新detach table 表名 然后 attach table 表名
如果是集群表例如ReplicatedMergeTree引擎,两张表结构一样的本地表之间的data_paths不能互通,因为zk的信息不同步,无法识别数据
如果是无副本的mergetree还没验证

更多推荐