当您需要将云数据库RDS MySQL或云原生数据库PolarDB MySQL中的数据迁移至云数据库ClickHouse中进行实时分析时,本文档为您提供了以RDS MySQL为参考的示例,以帮助您轻松完成数据迁移任务。
前提条件
已创建目标集群。
RDS MySQL与目标集群使用了相同的VPC,且在同一地域下,并将彼此的IP添加到了对方白名单中。如果不满足此条件,请先解决网络问题。具体操作,请参见如何解决目标集群与数据源网络互通问题。
步骤一:创建RDS MySQL表并写入数据
本步骤涉及创建数据库、表以及填充数据的操作。若您的RDS MySQL中已存在相关数据,可直接跳过此步骤。
通过DMS连接工具连接RDS MySQL实例,具体操作请参见通过DMS登录RDS MySQL。
执行创建数据库语句。
CREATE DATABASE testdb;
执行建表语句,在数据库
testdb
中创建表mysql_test_table
。CREATE TABLE testdb.mysql_test_table ( v1 Int NOT NULL, v2 Int DEFAULT NULL, v3 Float DEFAULT NULL ) ENGINE=InnoDB;
在表
mysql_test_table
中写入数据。INSERT INTO testdb.mysql_test_table VALUES (4,4,4.0),(1,1,2.0),(1,1,0.0),(4,1,2.0),(7,1,3.0);
步骤二:创建云数据库ClickHouse表
通过DMS连接云数据库ClickHouse集群,具体操作请参见通过DMS连接ClickHouse。
执行建表语句,以下示例为在默认数据库
default
中创建表clickhouse_test_table
。CREATE TABLE default.clickhouse_test_table ON CLUSTER default ( v1 Int32, v2 Nullable(Int32), v3 Nullable(Float32) ) ENGINE = MergeTree ORDER BY v1;
说明云数据库ClickHouse表的结构类型需与RDS MySQL表对应。具体映射关系,请参见数据类型映射。
RDS MySQL建表语句中未指定NOT NULL的列,值可以为NULL。同时,云数据库ClickHouse建表语句中的对应列使用Nullable进行标识。
(可选)创建分布式表
clickhouse_test_table_distributed
。说明如果您的云数据库ClickHouse集群为多节点集群,建议您选择创建分布式表。分布式表通过利用集群中各服务器的存储和计算资源,实现数据写入和查询操作的高效执行。不仅支持优秀的横向扩展性,还确保了高性能以及高可用性。
CREATE TABLE clickhouse_test_table_distributed ON CLUSTER default AS clickhouse_test_table ENGINE = Distributed(default, default, clickhouse_test_table, rand());
步骤三:读取RDS MySQL数据并写入云数据库ClickHouse
通过DMS连接云数据库ClickHouse集群并执行迁移语句,具体操作请参见通过DMS连接ClickHouse。
语法如下:
INSERT INTO <ClickHouse表名> select * from mysql('<RDS MySQL连接地址>:<端口>', '<RDS MySQL数据库>','<RDS MySQL表名>', '<RDS MySQL数据库账号>', '<RDS MySQL数据库账号的密码>')
如何获取RDS MySQL的连接地址和端口,请参见查看和管理实例连接地址和端口。
示例如下。
INSERT INTO clickhouse_test_table_distributed SELECT * FROM mysql('rm-bp16t9h3999xb****.mysql.rds.aliyuncs.com:3306','testdb','mysql_test_table','test','123456Aa');
步骤四:查询云数据库ClickHouse的数据
查询导入到云数据库ClickHouse的数据。输入查询语句并单击执行(F8),确认数据是否同步成功,查询语句如下。
SELECT * FROM clickhouse_test_table_distributed;
说明如果您导入的是本地表,请将查询语句中的分布式表名
clickhouse_test_table_distributed
更换为本地表名clickhouse_test_table
,再进行查询。查询结果如下。
数据类型映射
RDS MySQL或PolarDB MySQL类型 | ClickHouse类型 |
Unsigned tinyint | UInt8 |
Tinyint | Int8 |
Unsigned smallint | UInt16 |
Smallint | Int16 |
Unsigned int,Unsigned mediumint | UInt32 |
Int,Mediumint | Int32 |
Unsigned bigint | UInt64 |
Bigint | Int64 |
Float | Float32 |
Double | Float64 |
Date | Date |
Datetime,Timestamp | DateTime |
Binary | FixedString |
其他 | String |