迁移ClickHouse数据
更新时间:2025-05-29
迁移ClickHouse数据
将ClickHouse中的数据迁移至Palo主要是利用Palo的Multi Catalog功能。本文将介绍如何将ClickHouse的数据迁移到Palo中。 若您已购买PALO实例,可提交PALO百度云工单,PALO团队将提供迁移工具,该工具支持幂等、设置并发、查看迁移进度,可帮助您简单快速的完成数据同步。
前提条件
-
确保ClickHouse实例与Palo实例的网络处于互通状态。
- 数据源集群所有节点和Palo实例处于同一VPC下。
- 若设置了安全组,请确认Palo实例可以访问到ClickHouse实例的HTTP端口(默认为8123)。
示例环境
本示例为将ClickHouse实例的数据库test_db中表test_table的数据迁移到Palo实例数据库test_db中表test_table中。在实际使用中,请根据您的实际情况修改对应参数。示例环境如下:
源数据准备
登录到您的ClickHouse实例中,进行如下操作:
- 创建数据库
Plain Text
1CREATE DATABASE test_db;
- 创建测试表
Plain Text
1CREATE TABLE test_table
2(
3 id Int32,
4 name String,
5 age Int32
6) ENGINE = Memory;
- 插入测试数据
Plain Text
1INSERT INTO test_table VALUES
2(1, 'Alice', 25),
3(2, 'Bob', 30),
4(3, 'Charlie', 35),
5(4, 'David', 40),
6(5, 'Eve', 45);
数据迁移
- 连接Palo实例。
- 创建ClickHouse JDBC Catalog。
Plain Text
1CREATE CATALOG clickhouse_catalog PROPERTIES (
2 "type"="jdbc",
3 "user"="admin",
4 "password"="{password}",
5 "jdbc_url" = "jdbc:clickhouse://{clickhouse_ip}:{http_port}/test_db",
6 "driver_url" = "clickhouse-jdbc-0.4.6.jar",
7 "driver_class" = "com.clickhouse.jdbc.ClickHouseDriver"
8);
参数 | 必选 | 默认值 | 说明 |
---|---|---|---|
user | 是 | 无 | ClickHouse数据库的账号。 |
password | 是 | 无 | ClickHouse数据库的密码。 |
jdbc_url | 是 | 无 | JDBC连接串。需要包含ClickHouse数据库的连接地址。 |
driver_url | 是 | 无 | JDBC Driver的Jar包名称。 |
driver_class | 是 | 无 | JDBC Driver的Class名称。 |
lower_case_table_names | 否 | false | 指定是否以小写的形式同步JDBC外部数据源的库名和表名。 true:通过维护小写名称到远程系统中实际名称的映射,能够查询非小写的数据库和表。此时,库表列名都会被转换为小写。 false:不能查询非小写的数据库和表。 |
only_specified_database | 否 | false | 指定是否只同步指定的Database。 true:只同步JDBC URL中指定的数据源的 Database。 false:同步JDBC URL中所有的Database。 |
include_database_list | 否 | "" | 当only_specified_database=true 时,指定同步多个Database,以英文逗号分隔。Database名称大小写敏感。 |
exclude_database_list | 否 | "" | 当only_specified_database=true 时,指定不需要同步的多个Database,以英文逗号分隔。Database名称大小写敏感。 |
- 查看Catalog
Plain Text
1SHOW CATALOGS;
- (可选)切换至External Catalog test目录下。
您可以像使用Internal Catalog一样,对External Catalog clickhouse_catalog的数据进行查看和访问。
Plain Text
1SWITCH clickhouse_catalog;
- (可选)切换内部的catalog internal目录下。
如果您没有执行第4步,跳过此步骤。
Plain Text
1SWITCH internal;
- (可选)创建数据。
如果您已经创建了目标数据库,可跳过此步骤。
Plain Text
1CREATE database test_db;
- 切换至目标数据库。
Plain Text
1USE test_db;
- 创建表。
如果您已经有了目标表,请检查目标列类型与ClickHouse源数据列类型是否一一对应。
如果您还没有目标表,创建表时,目标列类型需与ClickHouse源数据列类型一一对应。
Plain Text
1CREATE TABLE test_table
2(
3 id int,
4 name string,
5 age int
6)
7DISTRIBUTED BY HASH(id) BUCKETS 10
8PROPERTIES("replication_num" = "1");
- 迁移数据。
Plain Text
1INSERT INTO internal.test_db.test_table SELECT * FROM clickhouse_catalog.test_db.test_table;
- 查看数据导入情况。
Plain Text
1SELECT * FROM internal.test_db.test_table;
迁移增量数据
实际生产环境中,ClickHouse数据会存在离线数据和增量数据,该方案对于为存量数据的迁移,关于增量数据迁移可以考虑以下两种方式:
- 数据双写:在生产ClickHouse数据时并行写入一份数据到Palo中。
- 定期同步:通过周期性作业读取ClickHouse中的分区数据写入Palo。