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

本文涉及的产品
对象存储 OSS,20GB 3个月
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 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
目录
相关文章
|
2月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
3月前
|
NoSQL 前端开发 MongoDB
[保姆级教程]Windows安装MongoDB教程
【6月更文挑战第4天】该内容是关于MongoDB的安装包下载及安装步骤指南。首先,访问网址 &lt;a href=&quot;https://www.mongodb.com/try&quot; target=&quot;_blank&quot;&gt;https://www.mongodb.com/try&lt;/a&gt; 进入官网,选择MongoDB Community Edition(社区版)。接着,挑选合适的版本和系统平台,推荐下载zip压缩包。下载后,进行安装,依次点击“Next”同意协议,选择自定义安装路径,然后继续安装直至完成。
495 0
|
24天前
|
JavaScript NoSQL 前端开发
|
27天前
|
NoSQL 安全 MongoDB
【MongoDB深度揭秘】你的更新操作真的安全了吗?MongoDB fsync机制大起底,数据持久化不再是谜!
【8月更文挑战第24天】MongoDB是一款备受欢迎的NoSQL数据库,以其灵活的文档模型和强大的查询能力著称。处理关键业务数据时,数据持久化至关重要。本文深入探讨MongoDB的写入机制,特别是更新操作时的fsync行为。MongoDB先将数据更新至内存以提升性能,而非直接写入磁盘。fsync的作用是确保数据从内存同步到磁盘,但MongoDB并非每次更新后都立即执行fsync。通过设置不同的写入关注级别(如w:0、w:1和w:majority),可以平衡数据持久性和性能。
27 1
|
1月前
|
监控 NoSQL MongoDB
mongodb查询100万数据如何查询快速
综上,提高MongoDB百万级数据的查询性能需要综合多项技术,并在实际应用中不断调优和实践。理解数据的特征,合理设计索引,优化查询语句,在数据访问、管理上遵循最佳的实践,这样才能有效地管理和查询大规模的数据集合。
109 1
|
20天前
|
持续交付 C# 敏捷开发
“敏捷之道:揭秘WPF项目中的快速迭代与持续交付——从需求管理到自动化测试,打造高效开发流程的全方位指南”
【8月更文挑战第31天】敏捷开发是一种注重快速迭代和持续交付的软件开发方法,通过短周期开发提高产品质量并快速响应变化。本文通过问题解答形式,探讨在Windows Presentation Foundation(WPF)项目中应用敏捷开发的最佳实践,涵盖需求管理、版本控制、自动化测试及持续集成等方面,并通过具体示例代码展示其实施过程,帮助团队提升代码质量和开发效率。
37 0
|
1月前
|
存储 NoSQL 安全
MongoDB:它如何悄然改变了全球开发者的数据游戏规则?
【8月更文挑战第8天】MongoDB是一款革命性的文档数据库,在开发者数据平台领域享有盛誉。以其独特的文档数据模型著称,无需预定义复杂模式即可高效存储与处理数据。支持实时数据分析及多云全球化部署,并具备企业级安全特性。从快速开发到大数据分析,MongoDB为现代应用提供全方位支持。
43 1
|
1月前
|
NoSQL MongoDB 数据库
DTS 的惊天挑战:迁移海量 MongoDB 数据时,捍卫数据准确完整的生死之战!
【8月更文挑战第7天】在数字化时代,大数据量的MongoDB迁移至关重要。DTS(数据传输服务)通过全面的数据评估、可靠的传输机制(如事务保证一致性)、异常处理(如回滚或重试),以及迁移后的数据校验来确保数据准确无损。DTS还处理数据转换与映射,即使面对不同数据库结构也能保持数据完整性,为企业提供可靠的数据迁移解决方案。
37 2
|
1月前
|
存储 NoSQL 物联网
MongoDB:改变游戏规则的数据库,看它如何统治数据世界的每一个角落
【8月更文挑战第7天】MongoDB是一款高性能、开源的NoSQL数据库,采用文档数据模型,支持丰富查询语言及二级索引。其灵活的数据模型和扩展性使其在大数据应用、实时分析、物联网、内容管理系统及电子商务平台等多种现代场景中广泛应用。例如,在大数据应用中,它可以高效存储社交媒体的非结构化数据;在实时分析中,能快速处理新数据并即时更新结果;在物联网应用中,则适用于存储大量非结构化传感器数据;而在内容管理和电子商务平台中,能提供灵活的内容存储和高效的商品搜索功能。
51 2
|
2月前
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
87 1