一、1. 数据库表 Schema 迁移
通过执行 SELECT DATABASE,TABLE FROM system.tables WHERE database != 'system' 来确定数据库中所有的表。
在源数据库中通过 database.table 可以查询该表的 DDL 语句。
clickhouse-client –host $CLICKHOUSE_HOST –port $CLICKHOUSE_PORT –user $USER –password $PASSWORD -q "SHOW CREATE database.table" > database.table.sql
获取包含 DDL 语句的文件,在新集群中执行。其中,CLICKHOUSE_HOST 和 CLICKHOUSE_PORT 是源服务入口,USER 和 PASSWORD 是用户名和密码。操作步骤如下:
在新集群中创建对应的数据库:
clickhouse-client –host $TENCENT_CLICKHOUSE_HOST –port $TENCENT_CLICKHOUSE_PORT –user $USER –password $PASSWORD -q "CREATE DATABSE database"
创建表:
clickhouse-client –host $TENCENT_CLICKHOUSE_HOST –port $TENCENT_CLICKHOUSE_PORT –user $USER –password $PASSWORD > database.table.sql
其中,TENCENT_CLICKHOUSE_HOST 和 TENCENT_CLICKHOUSE_PORT 是腾讯云数据仓库 TCHouse-C 服务的入口,USER 和 PASSWORD 是用户名和密码。
二、2. 通过 Remote 函数进行数据迁移
在数据规模较少的情况下,可以通过 Remote 函数,将源集群的数据直接迁移至新集群中。执行如下 SQL:
INSERT INTO target_database.table SELECT * FROM remote('source_cluster',source_database.table,$USER,$PASSWORD)
该方案优势在于简单且可靠性高,但较为依赖网络传输效率。若因网络问题出现超时,可能需要重新导入数据。同时在迁移过程中,可能会对源集群造成一定的读压力,建议在业务低峰期操作。
在数据规模较大时(百 GB 级及以上),可以按照更细粒度的条件分批迁移(如按分区、天、小时等),例如按天进行迁移:
INSERT INTO target_database.table SELECT * FROM remote('source_cluster',source_database.table,$USER,$PASSWORD)WHERE event_date = '2025-05-25'
或者按照日期区间进行迁移:
INSERT INTO target_database.table SELECT * FROM remote('source_cluster',source_database.table,$USER,$PASSWORD)WHERE event_date BETWEEN '2025-06-01' AND '2025-06-30'
注意:说明:
注意:在数据规模较大时,建议采用本地表对本地表的迁移模式,直写目标集群的分布式表可能导致内存不足或者出现 Too many parts 报错。
可通过如下 SQL 来查询数据表分区的大小:
SELECT database, table, partition, count(), formatReadableSize(sum(bytes_on_disk))FROM system.partsWHERE activeGROUP BY database, table, partitionORDER BY database ASC, table ASC, partition ASC
三、3. 通过导出/导入数据文件进行数据迁移
将数据从源集群中导出到文件,并将该文件导入到新集群中。操作步骤如下:
数据导出:
clickhouse-client –host $CLICKHOUSE_HOST –port $CLICKHOUSE_PORT –user $USER –password $PASSWORD -q "SELECT * FROM database.table FORMAT CSV" > database.table.dat
数据导入:
clickhouse-client –host $TENCENT_CLICKHOUSE_HOST –port $TENCENT_CLICKHOUSE_PORT –user $USER –password $PASSWORD -q "INSERT INTO database.table FORMAT CSV" < database.table.dat
注意:说明:
注意:此处可选择多种数据格式,ClickHouse 可支持的格式请参见 产品文档。
四、4. 通过 JDBC 完成数据迁移
如果有后备数据源,还可以通过 JDBC 将数据重新写入到腾讯云数据仓库 TCHouse-C 集群中。关于 JDBC 写入详情请见 产品文档。