本文主要介绍如何创建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,details
中city
字段是一个嵌套的字段。
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 |