本文主要介绍如何创建MongoDB表并读写表数据。

创建MongoDB表

MongoDB Schema创建成功之后,接下来就可以创建MongoDB表。在DMS中通过以下示例在MongoDB中创建person表:

​create external table dla_person (
    id int,
    name string,
    age int,
    create_time timestamp
)TBLPROPERTIES (
    TABLE_MAPPING = 'person'
);​
参数说明如下:
  • external:创建的表是外表。
  • tblproperties:外表与源表的映射关系。

    table_mapping:表名映射。

表创建成功后,您可以通过MySQL客户端或者MySQL命令行工具连接DLA中的MongoDB Schema,从而使用SQL语句读写MongoDB数据库。

通过DLA将OSS中的数据写入MongoDB

对存储在OSS/Tablestore上的大数据进行分析之后,可以通过DLA把结果数据回写到MongoDB,供前台业务使用。

以dla_person表为例,通过MySQL命令行工具连接DLA,执行以下SQL语句把oss_db中customer的前十条记录进行一些转换,然后插入了mongo_test.dla_person表:

​mysql> insert into mongo_test.dla_person
    -> select c_custkey, c_name, c_custkey + 20, now() from oss_db.customer limit 10;
+------+
| rows |
+------+
|   10 |
+------+
1 row in set (3.72 sec)
mysql> select * from mongo_test.dla_person;
+------+--------------------+------+-------------------------+
| id   | title              | age  | create_time             |
+------+--------------------+------+-------------------------+
|    1 | james              |   10 | 2018-12-14 14:22:54.369 |
|    2 | bond               |   20 | 2018-12-14 14:23:48.527 |
|    3 | lily               |   30 | 2018-12-14 14:23:48.962 |
|    4 | lucy               |   20 | 2018-12-14 14:23:49.396 |
|    1 | Customer#000000001 |   21 | 2018-12-20 10:15:56.629 |
|    3 | Customer#000000003 |   23 | 2018-12-20 10:15:56.629 |
|    5 | Customer#000000005 |   25 | 2018-12-20 10:15:56.629 |
|    7 | Customer#000000007 |   27 | 2018-12-20 10:15:56.629 |
|    9 | Customer#000000009 |   29 | 2018-12-20 10:15:56.629 |
|    2 | Customer#000000002 |   22 | 2018-12-20 10:15:56.629 |
|    4 | Customer#000000004 |   24 | 2018-12-20 10:15:56.629 |
|    6 | Customer#000000006 |   26 | 2018-12-20 10:15:56.629 |
|    8 | Customer#000000008 |   28 | 2018-12-20 10:15:56.629 |
|   10 | Customer#000000010 |   30 | 2018-12-20 10:15:56.629 |
+------+--------------------+------+-------------------------+
14 rows in set (0.16 sec)​

查询MongoDB嵌套字段表

假设MongoDB中存在嵌套数据结构的collection,detailscity字段是一个嵌套的字段。

​db.Ha.insert({
    id: 1,
    name: "james",
    age: 1,
    details: {
      city: "hangzhou"
    }
});​

DLA中可通过以下SQL创建表:

CREATE EXTERNAL TABLE Ha (
    id int,
    name string,
    age int,
    city string
)
TBLPROPERTIES (
    COLUMN_MAPPING = 'city,details.city;'  #将DLA中声明的字段映射到底层MongoDB字段。
)

DLA中查询表数据:

​select * from Ha;
+------+-------+------+----------+
| id   | name  | age  | city     |
+------+-------+------+----------+
|    1 | james |    1 | hangzhou |​

查询ObjectId类型的字段

如果想要查询MongoDB中的ObjectId字段,例如_id。

DLA中可通过以下SQL创建表:

​CREATE EXTERNAL TABLE Ha (
    _id ObjectId,
    id int,
    name string,
    age int,
    city string
);​

DLA中查询表数据:

​​mysql> select * from Ha where _id = ObjectId('5edef42407bcd42c8bad4284');
+---------------------------------------+------+-------+------+----------+
| _id                                   | id   | name  | age  | city     |
+---------------------------------------+------+-------+------+----------+
| 5e de f4 24 07 bc d4 2c   8b ad 42 84 |    1 | james |    1 | hangzhou |​