本文介绍如何基于RDS表实现自动推断建表。

前提条件

为了更加方便地演示操作,您需要先通过以下步骤在RDS中准备好测试数据。
  1. 已创建RDS MySQL实例。如何创建,请参见创建RDS MySQL实例
  2. 已设置IP白名单。如何设置,请参见设置白名单
  3. 已创建账号和数据库。如何创建,请参见创建数据库和账号
  4. 已通过客户端、命令行连接RDS MySQL。如何连接,请参见通过客户端、命令行连接RDS MySQL实例
  5. 已创建表并写入测试数据,具体步骤如下。
    1. 创建person表,语句如下。
      create table person (
      id int,
      name varchar(1023),
      age int
      );
    2. 向person表中插入数据。
      insert into person 
      values 
      (1, 'james', 10), 
      (2, 'bond', 20), 
      (3, 'jack', 30), 
      (4, 'lucy', 40);
  6. 已创建RDS for MySQL Schema。

    本文示例中所有数据表均使用以下Schema。

      CREATE SCHEMA hello_mysql_vpc_rds WITH DBPROPERTIES (
        CATALOG = 'mysql', 
        LOCATION = 'jdbc:mysql://rm-2zer0vg58mfofake.mysql.rds.aliyuncs.com:3306/rds_mysql_dbname',
        USER = 'rds_mysqldb_username',
        PASSWORD = 'rds_mysqldb_password',
        INSTANCE_ID = 'rds_mysql_instance_id',
        VPC_ID = 'rds_mysqldb_vpcid'
      );

注意事项

在DLA中创建MySQL、SQL Server、PostgreSQL的Schema之前,需要将IP地址段100.104.0.0/16加入到RDS的白名单列表中。

由于RDS实例位于VPC内,默认情况下DLA无法访问VPC中的资源。为了让DLA能访问RDS,需要利用VPC反向访问技术,即在RDS白名单中添加100.104.0.0/16 IP地址段。

权限声明:当您使用了本文介绍的方法创建MySQL Schema,即视为您同意我们利用VPC反向访问技术读写RDS。

示例一:通过CREATE TABLE LIKE MAPPING创建表

创建表:

create external table person like mapping('person');
+-------------+-----------+-----------------+
desc person;
+-------------+-----------+-----------------+
| Field       | Type      | Collation       |
+-------------+-----------+-----------------+
| id          | int       | utf8_general_ci |
| age         | int       | utf8_general_ci |
| name        | varchar   | utf8_general_ci |

查询表数据:

SELECT * FROM hello_mysql_vpc_rds.person
 +------+------+----+
 | id  | name | age |
 +-----+------+-----+
 |    1| james|   10|
 |    2| bond |   20|
 |    3| jack |   30|
 |    4| lucy |   40|

示例二:通过CREATE TABLE LIKE复制表

传统数据库支持将一个表复制一份生成一张新表,DLA中通过CREATE TABLE LIKE可以实现同样的功能。

语法:

create external table_name2 like table_name_1;

示例:

以前面的person表为例,通过CREATE TABLE LIKE复制一份与person表结构、数据相同的表person_2。

create external table person_2 like person;
+------+-------------------+---+------+
SELECT * FROM hello_mysql_vpc_rds.person_2
 +------+------+----+
 | id  | name | age |
 +-----+------+-----+
 |    1| james|   10|
 |    2| bond |   20|
 |    3| jack |   30|
 |    4| lucy |   40|