全部产品
云市场

创建MongoDB表并读写数据

更新时间:2020-06-24 12:01:53

创建MongoDB表

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

  1. create external table dla_person (
  2. id int,
  3. title varchar(127),
  4. age int,
  5. create_time timestamp
  6. )TBLPROPERTIES (
  7. TABLE_MAPPING = 'person',
  8. COLUMN_MAPPING = 'title,name;'
  9. );
  • external:创建的表是外表
  • tblproperties:外表与源表的映射关系,具体细节参考tblproperties
    • table_mapping:表名映射
    • column_mapping:字段映射关系

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

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

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

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

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

查询MongoDB嵌套字段表

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

  1. db.Ha.insert({
  2. id: 1,
  3. name: "james",
  4. age: 1,
  5. details: {
  6. city: "hangzhou"
  7. }
  8. });

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

  1. CREATE EXTERNAL TABLE Ha (
  2. id int,
  3. name string,
  4. age int,
  5. city string
  6. )
  7. TBLPROPERTIES (
  8. COLUMN_MAPPING = 'city,details.city;'
  9. )

COLUMN_MAPPING:将DLA中声明的字段映射到底层MongoDB字段。

DLA中查询表数据:

  1. mysql> select * from Ha;
  2. +------+-------+------+----------+
  3. | id | name | age | city |
  4. +------+-------+------+----------+
  5. | 1 | james | 1 | hangzhou |

查询ObjectId类型的字段

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

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

  1. CREATE EXTERNAL TABLE Ha (
  2. _id ObjectId,
  3. id int,
  4. name string,
  5. age int,
  6. city string
  7. );

DLA中查询表数据:

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