基于MongoDB集合自动推断建表

本文档主要介绍了基于MongoDB集合自动推断建表的操作步骤。

前提条件

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

  1. 创建实例

    说明

    DLA和MongoDB所属地域必须相同,否则无法进行本文档的操作。由于DLA将通过VPC网络连接MongoDB数据库,建议您创建MongoDB实例时,网络类型选择VPC。同时,MongoDB支持将经典网络切换为VPC网络。

  2. 设置白名单

    说明

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

  3. 连接实例

  4. 写入测试数据。

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

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

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

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

    上述示例的参数说明如下:

    参数名称

    参数描述

    location

    MongoDB实例的ConnectionStringURI。

    database

    MonoDB数据库名字。

    instance_id

    MongoDB实例ID。

    vpc_id

    MongoDB实例所属VPC ID。

注意事项

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

说明

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

操作步骤

您可以通过以下两种方式在DLA中自动映射MongoDB数据库中的表数据。

  • 通过CREATE TABLE LIKE MAPPING创建表。

    1. 在DLA中创建表。

      create external table person like mapping('person');
      +-------------+-----------+-----------------+
      desc person;
      +-------------+-----------+-----------------+
      | Field       | Type      | Collation       |
      +-------------+-----------+-----------------+
      | age         | double    | utf8_general_ci |
      | create_time | timestamp | utf8_general_ci |
      | id          | double    | utf8_general_ci |
      | name        | varchar   | utf8_general_ci |
    2. 在DLA中查询表数据。

      select * from person limit 4;
      +------+-------------------+---+------+
      | age  | create_time       | id| name |
      +------+-----------------------+------+
      | 10 | 2019-04-19 18:03:03 | 1 | james|
      | 20 | 2019-04-19 18:03:04 | 2 | bond |
      | 30 | 2019-04-19 18:03:04 | 3 | lily |
      | 20 | 2019-04-19 18:03:05 | 4 | lucy |
  • 通过CREATE TABLE LIKE复制表。

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

    1. 在DLA中复制表。

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

      create external table person_2 like person;
    2. 在DLA中查询表数据。

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