云数据库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。

操作步骤

  1. 创建RDS MySQL表并写入数据
    1. 登录RDS管理控制台
    2. 在左侧导航栏选择实例列表
    3. 实例列表页面,单击目标实例ID。
    4. 基本信息页面,单击右上方的登录数据库
    5. 登录实例页面,输入数据库账号和密码,单击登录
    6. 执行建表语句,以下示例为在数据库testdb中创建表mysql_test_table。
      CREATE TABLE testdb.mysql_test_table (
        v1 Int NOT NULL,
        v2 Int DEFAULT NULL,
        v3 Float DEFAULT NULL
      ) ENGINE=InnoDB;
    7. 向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);
  2. 创建云数据库ClickHouse
    1. 登录云数据库ClickHouse控制台
    2. 在页面左上角,选择目标集群所在的地域。
    3. 集群列表页面,选择默认实例列表云原生版本实例列表,单击目标集群ID。
    4. 如果您的集群是社区兼容版,请单击右上方导航栏的登录数据库
      如果您的集群是云原生版,请单击集群计算组操作列的登录
    5. 登录实例页面,输入数据库账号和密码,单击登录
    6. 执行建表语句,以下示例为在数据库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进行标识。
    7. (可选)创建分布式表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());
  3. 从RDS MySQL中导入数据至云数据库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');
  4. 查询导入到云数据库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