本文介绍如何从阿里云关系型数据库RDS(Relational Database Service) MySQL中导入数据至云数据库ClickHouse

注意事项

  • RDS MySQL为付费服务。计费详情,请参见收费项、计费方式与价格
  • 请确保数据源RDS MySQL实例和目的云数据库ClickHouse集群在同一地域并使用相同的VPC。

前提条件

  • 已创建云数据库ClickHouse集群,如何创建,请参见新建集群
  • 已创建RDS MySQL实例,如何创建,请参见创建RDS MySQL实例
  • 已为RDS MySQL实例创建数据库和账号,如何创建,请参见创建数据库和账号
  • 已将云数据库ClickHouse集群的IP地址添加到RDS MySQL的白名单中,如何添加,请参见设置IP白名单
    说明 您可以通过select * from system.clusters;命令查看云数据库ClickHouse集群的IP地址。

操作步骤

  1. 创建RDS MySQL表并写入数据
    1. 登录RDS管理控制台
    2. 实例列表页面,单击目标实例ID。
    3. 单击右上方的登录数据库
    4. 登录实例页面,输入数据库账号和密码,单击登录
    5. 执行建表语句,以下示例为在数据库testdb中创建表mysql_test_table。
      CREATE TABLE testdb.mysql_test_table (
        v1 Int NOT NULL,
        v2 Int DEFAULT NULL,
        v3 Float DEFAULT NULL
      ) ENGINE=InnoDB;
    6. 向RDS MySQL表写入数据。
      insert into testdb.mysql_test_table values (4,4,4.0),(1,1,2.0);
  2. 创建云数据库ClickHouse
    1. 登录云数据库ClickHouse控制台
    2. 集群列表页面,单击目标集群ID。
    3. 单击右上方的登录数据库
    4. 登录实例页面,输入数据库账号和密码,单击登录
    5. 创建本地表。
      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进行标识。
    6. 创建分布式表。
      说明 如果您只需要导入RDS MySQL数据至本地表,可跳过此步骤。
      CREATE TABLE clickhouse_test_table_distributed ON CLUSTER default
       AS clickhouse_test_table
      ENGINE = Distributed(default, default, clickhouse_test_table, rand());
  3. 导入RDS MySQL数据至云数据库ClickHouse
    语法如下。
    insert into <ClickHouse表名> select * from mysql('<RDS 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');
  4. 查询导入到云数据库ClickHouse的数据
    select * from clickhouse_test_table_distributed;
    说明 如果您导入的是本地表,请将查询语句中的分布式表名更换为本地表名,再进行查询。
    查询结果如下。
    ┌─v1─┬─v1─┬─v3─┐
    │  4   │  4   │  4.0 │  
    │  1   │  1   │  2.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