全部产品
云市场

基于RDS表自动推断建表

更新时间:2019-04-24 10:23:09

前提条件

为了更加方便地演示操作,您需要先通过以下步骤在RDS中准备好测试数据。

  1. 创建RDS for MySQL实例

  2. 设置白名单

  3. 创建账号和数据库

  4. 连接实例

  5. 创建表并写入测试数据

    创建person表

    1. create table person (
    2. id int,
    3. name varchar(1023),
    4. age int
    5. );

    向person表中插入数据

    1. insert into person
    2. values
    3. (1, 'james', 10),
    4. (2, 'bond', 20),
    5. (3, 'jack', 30),
    6. (4, 'lucy', 40);
  6. 创建RDS for MySQL Schema

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

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

注意事项

在DLA中创建MySQL/SQLServer/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创建表

创建表:

  1. create external table person like mapping('person');
  2. +-------------+-----------+-----------------+
  3. desc person;
  4. +-------------+-----------+-----------------+
  5. | Field | Type | Collation |
  6. +-------------+-----------+-----------------+
  7. | id | int | utf8_general_ci |
  8. | age | int | utf8_general_ci |
  9. | name | varchar | utf8_general_ci |

查询表数据:

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

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

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

语法:

  1. create external table_name2 like table_name_1;

示例:

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

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