腾讯云数据仓库 TCHouse-C ClickHouse 集群迁移方案

如何将自建 IDC 或其他云平台上的 ClickHouse 集群的数据迁移至腾讯云数据仓库 TCHouse-C 集群。在数据迁移之前,确保自建集群与目标集群之间网络互通。

相关产品
腾讯云数据仓库 TCHouse-C 产品页,含版本规格、价格与购买入口。

一、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 写入详情请见 产品文档。

赞 (0)
上一篇 5天前
下一篇 5天前