通过外表导入至湖仓版

您可以将RDS MySQL的数据导入云原生数据仓库 AnalyticDB MySQL 版,在数据仓库中完成多源数据整合和复杂查询分析,也可以将经过汇总的关键指标写入RDS MySQL。

前提条件

  • AnalyticDB for MySQL集群的产品系列为企业版、基础版或湖仓版

  • RDS MySQL实例与AnalyticDB for MySQL集群位于同一VPC。

  • 已在AnalyticDB for MySQL控制台集群信息页面的网络信息栏启用ENI网络开关。

  • 已将AnalyticDB for MySQL的VPC网段加入RDS MySQL实例的白名单中。详细操作步骤,请参见设置IP白名单

示例数据说明

本文示例的RDS MySQL数据库名为test_adb,并在该库中创建了一张名为person的表,示例如下:

CREATE TABLE IF NOT EXISTS test_adb.person(
id int,
name varchar(1023),
age int
);

person表中插入数据,示例如下:

INSERT INTO test_adb.person values
(1, 'james', 10),
(2, 'bond', 20),
(3, 'jack', 30),
(4, 'lucy', 40);

操作步骤

  1. 进入SQL开发编辑器。

    1. 登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在企业版、基础版或湖仓版页签下,单击目标集群ID。

    2. 在左侧导航栏,单击作业开发 > SQL开发

  2. 引擎选择Xihe,资源组选择Interactive型资源组。

  3. 执行以下语句,创建外部数据库。示例如下:

    CREATE EXTERNAL DATABASE adb_external_db;
  4. 执行以下语句,创建外表。示例如下:

    说明
    • AnalyticDB for MySQL外表和RDS MySQL中表的列名称、数量、顺序、字段类型需要相同。

    • AnalyticDB for MySQL外表的参数说明,请参见CREATE EXTERNAL TABLE

    CREATE EXTERNAL TABLE IF NOT EXISTS  adb_external_db.person (
        id int,
        name varchar(1023),
        age int
     )ENGINE = 'MYSQL' TABLE_PROPERTIES = '{
       "url":"jdbc:mysql://mysql-address:3306/test_adb",
       "tablename":"person",
       "username":"mysql-user-name",
       "password":"mysql-user-password",
       "charset":"utf8"
    }';
  5. 查询数据。

    外表创建成功后,您可以在AnalyticDB for MySQL中通过SELECT查询RDS MySQL中person表的数据。

    SELECT * FROM adb_external_db.person;

    返回结果如下:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    3 | jack  |   30 |
    |    4 | lucy  |   40 |
    +------+-------+------+
    4 rows in set (0.35 sec)
  6. 将数据写入RDS MySQL。

    INSERT INTO adb_external_db.person SELECT 5, 'lily', 20;
  7. 执行以下语句,创建目标数据库。

    CREATE DATABASE adb_demo;
  8. 执行以下语句,在目标数据库adb_demo中创建一张名为mysql_import_test的目标表,用于存储从RDS MySQL导入的数据。

    CREATE TABLE IF NOT EXISTS  mysql_import_test (
        id int,
        name varchar(1023),
        age int,
       PRIMARY KEY (id)
     )
    DISTRIBUTED BY HASH(id);
  9. 执行以下语句,将RDS MySQL实例中的数据导入至目标AnalyticDB for MySQL集群中。

    INSERT INTO mysql_import_test
    SELECT * FROM adb_external_db.person;
  10. 执行以下语句,查询AnalyticDB for MySQLmysql_import_test数据。

    SELECT * FROM mysql_import_test;

    返回结果如下:

    +------+-------+------+
    | id   | name  | age  |
    +------+-------+------+
    |    1 | james |   10 |
    |    2 | bond  |   20 |
    |    4 | lucy  |   40 |
    |    5 | lily  |   20 |
    |    3 | jack  |   30 |
    +------+-------+------+
    5 rows in set (0.37 sec)