全部产品
云市场

基于MongoDB集合自动推断建表

更新时间:2019-04-23 10:14:55

前提条件

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

  1. 创建实例

    DLA和MongoDB所属地域必须相同,否则无法进行本文档操作。

    由于DLA将通过MongoDB的VPC连接MongoDB数据库,建议您创建MongoDB实例时,网络类型选择VPC。同时,MongoDB支持通过切换为专有网络将经典网络切换为VPC。

  2. 设置白名单

  3. 连接实例

  4. 写入测试数据

    本示例在MongoDB实例的mongo_test数据库中创建person集合,集合测试数据如下所示。

    1. db.person.insert({id:1, name: "james", age: 10, create_time: new Date()});
    2. db.person.insert({id:2, name: "bond", age: 20, create_time: new Date()});
    3. db.person.insert({id:3, name: "lily", age: 30, create_time: new Date()});
    4. db.person.insert({id:4, name: "lucy", age: 20, create_time: new Date()});
  5. 创建MongoDB Schema

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

    1. CREATE DATABASE mongo_test WITH DBPROPERTIES (
    2. catalog = 'mongodb',
    3. location = 'mongodb://<your-user-name>:<your-password>@dds-bp1694axxxxxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1694ayyyyyyyy.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=zzzzz',
    4. database = 'mongo_test',
    5. instance_id = 'mongodb_instance_id',
    6. vpc_id = 'vpc-*******'
    7. );

    参数说明

    • location:MongoDB实例的ConnectionStringURI。

      ConnectionStringURI

    • database:MonoDB数据库名字。

    • instance_id:MongoDB实例ID。

      INSTANCE_ID

    • vpc_id:MongoDB实例所属VPC ID。

注意事项

在DLA中创建MongoDB Schema之前,需要将IP地址段100.104.0.0/16加入到MongoDB白名单列表中。

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

权限声明:当您在MongoDB白名单中添加了100.104.0.0/16IP地址段,即视为您同意我们利用VPC反向访问技术读写MongoDB数据库。

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

创建表:

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

查询表数据:

  1. select * from person limit 4;
  2. +------+-------------------+---+------+
  3. | age | create_time | id| name |
  4. +------+-----------------------+------+
  5. | 10 | 2019-04-19 18:03:03 | 1 | james|
  6. | 20 | 2019-04-19 18:03:04 | 2 | bond |
  7. | 30 | 2019-04-19 18:03:04 | 3 | lily |
  8. | 20 | 2019-04-19 18:03:05 | 4 | lucy |

示例二:通过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 person_2 limit 4;
  4. +------+-------------------+---+------+
  5. | age | create_time | id| name |
  6. +------+-----------------------+------+
  7. | 10 | 2019-04-19 18:03:03 | 1 | james|
  8. | 20 | 2019-04-19 18:03:04 | 2 | bond |
  9. | 30 | 2019-04-19 18:03:04 | 3 | lily |
  10. | 20 | 2019-04-19 18:03:05 | 4 | lucy |