云数据库ClickHouse支持从云数据库RDS MySQL和云原生关系型数据库PolarDB MySQL导入数据,且导入方法相同。本文以云数据库RDS为例介绍如何从RDS MySQL中导入数据至云数据库ClickHouse的操作步骤。
前提条件
- 已创建目标云数据库ClickHouse集群。具体操作,请参见新建集群。
- 已为目标云数据库ClickHouse集群创建数据库账号和密码。具体操作,请参见创建账号。
- 已创建源RDS MySQL实例。具体操作,请参见创建RDS MySQL实例。
- 已为RDS MySQL实例创建数据库和账号。具体操作,请参见创建数据库和账号。
- 已将云数据库ClickHouse集群的IP地址添加到RDS MySQL的白名单中。具体操作,请参见设置IP白名单。
说明 您可以通过select * from system.clusters;
命令查看云数据库ClickHouse集群的IP地址。
注意事项
请确保数据源RDS MySQL实例和目的云数据库ClickHouse集群在同一地域并使用相同的VPC。
操作步骤
- 创建RDS MySQL表并写入数据
- 登录RDS管理控制台。
- 在左侧导航栏选择实例列表。
- 在实例列表页面,单击目标实例ID。
- 在基本信息页面,单击右上方的登录数据库。
- 在登录实例页面,输入数据库账号和密码,单击登录。
- 执行建表语句,以下示例为在数据库testdb中创建表mysql_test_table。
CREATE TABLE testdb.mysql_test_table (
v1 Int NOT NULL,
v2 Int DEFAULT NULL,
v3 Float DEFAULT NULL
) ENGINE=InnoDB;
- 向RDS MySQL表写入数据。
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表
- 登录云数据库ClickHouse控制台。
- 在页面左上角,选择目标集群所在的地域。
- 在集群列表页面,选择默认实例列表或云原生版本实例列表,单击目标集群ID。
- 如果您的集群是社区兼容版,请单击右上方导航栏的登录数据库。
如果您的集群是云原生版,请单击集群计算组操作列的登录。
- 在登录实例页面,输入数据库账号和密码,单击登录。
- 执行建表语句,以下示例为在数据库cktest中创建表mysql_test_table。
create table cktest.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。
说明 如果您只需要导入RDS MySQL数据至本地表,可跳过此步骤。
CREATE TABLE clickhouse_test_table_distributed ON CLUSTER default
AS clickhouse_test_table
ENGINE = Distributed(default, default, clickhouse_test_table, rand());
- 从RDS MySQL中导入数据至云数据库ClickHouse
语法如下:
insert into <ClickHouse表名> select * from 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的数据
输入查询语句并单击
执行(F8),确认数据是否同步成功,查询语句如下。
select * from clickhouse_test_table_distributed;
说明 如果您导入的是本地表,请将查询语句中的分布式表名clickhouse_test_table_distributed
更换为本地表名clickhouse_test_table
,再进行查询。
查询结果如下。
┌─v1─┬─v2─┬─v3──┐
│ 4 │ 4 │ 4.0 │
│ 1 │ 1 │ 2.0 │
│ 1 │ 1 │ 0.0 │
│ 4 │ 1 │ 2.0 │
│ 7 │ 1 │ 3.0 │
└────┴────┴─────┘
数据类型映射
RDS 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 |