全部产品
Search
文档中心

云数据库 ClickHouse:从MySQL导入数据

更新时间:Sep 04, 2024

当您需要将云数据库RDS MySQL或云原生数据库PolarDB MySQL中的数据迁移至云数据库ClickHouse中进行实时分析时,本文档为您提供了以RDS MySQL为参考的示例,以帮助您轻松完成数据迁移任务。

前提条件

  • 已创建目标集群。

    说明
    • 如果您未创建目标集群,请先创建目标集群。具体操作,请参见新建集群

    • 目标集群需有高权限数据库账号。具体操作,请参见创建账号

  • RDS MySQL与目标集群使用了相同的VPC,且在同一地域下,并将彼此的IP添加到了对方白名单中。如果不满足此条件,请先解决网络问题。具体操作,请参见如何解决目标集群与数据源网络互通问题

    • ClickHouse如何添加白名单,请参见设置白名单

    • RDS MySQL如何添加白名单,请参见设置IP白名单

      说明

      您可以通过SELECT * FROM system.clusters;命令查看云数据库ClickHouse集群的IP地址。

步骤一:创建RDS MySQL表并写入数据

说明

本步骤涉及创建数据库、表以及填充数据的操作。若您的RDS MySQL中已存在相关数据,可直接跳过此步骤。

  1. 通过DMS连接工具连接RDS MySQL实例,具体操作请参见通过DMS登录RDS MySQL

  2. 执行创建数据库语句。

    CREATE DATABASE testdb;
  3. 执行建表语句,在数据库testdb中创建表mysql_test_table

    CREATE TABLE testdb.mysql_test_table (
      v1 Int NOT NULL,
      v2 Int DEFAULT NULL,
      v3 Float DEFAULT NULL
    ) ENGINE=InnoDB;
  4. 在表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表

  1. 通过DMS连接云数据库ClickHouse集群,具体操作请参见通过DMS连接ClickHouse

  2. 执行建表语句,以下示例为在默认数据库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进行标识。

  3. (可选)创建分布式表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的数据

  1. 查询导入到云数据库ClickHouse的数据。输入查询语句并单击执行(F8),确认数据是否同步成功,查询语句如下。

    SELECT * FROM clickhouse_test_table_distributed;
    说明

    如果您导入的是本地表,请将查询语句中的分布式表名clickhouse_test_table_distributed更换为本地表名clickhouse_test_table,再进行查询。

  2. 查询结果如下。

    image.png

数据类型映射

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