教程:使用Data Lake Analytics读/写MongoDB数据

本文涉及的产品
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 MongoDB,通用型 2核4GB
简介: Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于MongoDB 的支持, 这篇教程带你玩转 DLA 的 MongoDB 支持。 创建数据库 在 DLA 里面创建一个底层映射到 MongoDB 的外表的语法如下: CREATE DATABASE `mongo_test`.

Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于MongoDB 的支持, 这篇教程带你玩转 DLA 的 MongoDB 支持。

创建数据库

在 DLA 里面创建一个底层映射到 MongoDB 的外表的语法如下:

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',
    vpc_id = 'vpc-aaaaaaa'
);

这里要特别说明一下这个 location 属性,如果对 MongoDB 不熟悉的同学有可能看不明白,这个实际上是MongoDB的 ConnectionString, 里面包含了你的用户名、密码、要连接的MongoDB的地址、使用的认证数据库等等,不过不用担心,这么长的ConnectionString你不需要手动去拼出来,直接从阿里云MongoDB的控制台上可以直接复制过来这个信息:

Connection String

因为信息安全的原因,密码被显示成星号,这里大家要替换成真实的密码。另外底层实际连接的数据库是通过 database 这个属性来指定的。

跟普通的建表不同的是这里多了两个属性: VPC_IDINSTANCE_IDVPC_ID 是你的 MongoDB 所在VPC的ID, 如下图所示:

VPC ID

INSTANCE_ID 则是你的 MongoDB 实例ID, 在 MongoDB 的详情页面可以找到:

INSTANCE ID

建表需要这两个额外信息是因为现在用户的 MongoDB 数据库都是处于用户自己的VPC内部,默认情况下 DLA 是访问不了用户 VPC 里面的资源的,为了让DLA能够访问到用户RDS里面的数据,我们需要利用阿里云的VPC反向访问技术。

权限声明: 当您通过上述方式建库,就视为您同意我们利用VPC反向访问的技术去读写您的 MongoDB 。

另外您还需要把 100.104.0.0/16 加入你的 MongoDB 的白名单列表,这是我们VPC反向访问的IP地段,如下图:

ip_whitelist

创建表

数据库建完之后,我们可以建表了,我们先在你的 MongoDB 里面建立如下的 person 表用来做测试, 因为MongoDB是没有schema信息的,我们必须往里面插入数据才能生效,所以我们插入一些测试数据:

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()});

然后就可以在 DLA 的数据库里面建立相应的映射表了:

create external table dla_person (
    id int,
    title varchar(127),
    age int,
    create_time timestamp
)TBLPROPERTIES (
    TABLE_MAPPING = 'person',
    COLUMN_MAPPING = 'title,name'
);

这里我们展示了DLA的两个特性:

  • 通过 TABLE_MAPPING 我们可以让DLA层面的表名跟底层的表名不一样。

    • 你可以省略这个设置,那么表名就跟底层一样。
  • 通过 COLUMN_MAPPING 我们可以让DLA层面的column名字也跟底层不一样。

    • 同样,你也可以省略这个配置。

如果 TABLE_MAPPINGCOLUMN_MAPPING 你都不需要配置,那么整个 TBLPROPERTIES 都可以去掉。

这样我们就可以通过MySQL客户端连接到 DLA 数据库上面,就可以对 MongoDB 数据库里面的数据进行查询了:

mysql> select * from 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 |
+------+-------+------+-------------------------+
4 rows in set (0.92 sec)

熟悉SQL的同学一定觉得很爽吧,可以去熟悉的SQL语法去操作MongoDB数据库。

ETL: 把数据从OSS里面清洗出来写入MongoDB

很多场景下,在我们对存储在OSS/OTS上的大数据进行分析,分析完成之后把结果数据回写到 MongoDB 里面供前台业务使用。这种场景在DLA里面非常容易实现,还是举前面 dla_person 表例子,下面的语句把 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)

总结

我们今天介绍了DLA对于MongoDB的支持,目前DLA支持的数据源已经包括: OSS, OTS, RDS(MySQL, SQLServer, Postgres), MongoDB, 数据可以在这些数据源之间进行联合JOIN、流转,更多详细的介绍可以直接去我们的官网试用。

Happy DLAing!

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4月前
|
NoSQL MongoDB 数据安全/隐私保护
|
8天前
|
存储 NoSQL 关系型数据库
MongoDB 的数据关系
MongoDB是面向文档的NoSQL数据库,以其灵活的数据模型区别于传统关系型数据库。数据以JSON-like文档形式存储,文档可嵌套并存储在集合中。其特点包括:嵌入式文档、弱类型架构(无模式)、无连接性及引用关系。MongoDB支持动态添加字段,通过嵌入或引用处理文档关联,适应各种数据结构和复杂关系,适合不同应用场景。
|
18天前
|
NoSQL MongoDB
MongoDB数据日期显示相差8小时
MongoDB数据日期显示相差8小时
12 0
|
2月前
|
JSON NoSQL MongoDB
mongoDB数据的导出导入
mongoDB数据的导出导入
|
3月前
|
存储 NoSQL MongoDB
学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程
Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo 建议您使用 PIP 来安装 PyMongo。PIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:
92 1
|
3月前
|
NoSQL 安全 Linux
百度搜索:蓝易云【CentOS7安装MongoDB教程】
这些是在CentOS 7上安装MongoDB的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
132 0
|
4月前
|
NoSQL MongoDB Docker
百度搜索:蓝易云【Scrapy框架之Docker安装MongoDB教程。】
现在,你已经成功在Scrapy框架中使用Docker安装并配置了MongoDB。你可以在Scrapy爬虫中使用MongoDB进行数据存储和处理。
218 0
|
4月前
|
NoSQL MongoDB 数据安全/隐私保护
Flink CDC支持MongoDB的CDC(Change Data Capture)连接器
Flink CDC支持MongoDB的CDC(Change Data Capture)连接器
118 4
|
4月前
|
NoSQL 数据管理 分布式数据库
阿里云数据库MongoDB版助力掌阅平滑上云,撬动数据红利
随着互联网行业格局的逐步成型以及数字阅读行业的市场竞争日益激烈,掌阅将与阿里云和MongoDB继续深度合作,变现技术红利,继续深化存量用户精细化运营和加大增量用户贡献。
阿里云数据库MongoDB版助力掌阅平滑上云,撬动数据红利
|
4月前
|
存储 人工智能 NoSQL
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力
客户行为正在迅速演变,供应链正在重组,员工也正在以新的方式工作。企业需要提供更加个性化的客户体验,对市场趋势做出更快速的反应,监测和预防潜在问题。
多维数据实时分析,MongoDB给零售企业提供快速高效的数据洞察力