作者:终古
1 组件简介
MongoDB是面向文档的NoSQL(非关系型)数据库,它的数据结构由字段(Field)和值(Value)组成,类似于JSON对象。
数据集成的MongoDB输出组件提供了写入MongoDB数据库的能力。本文重点介绍如何配置加载策略
2 组件配置介绍
如上图所以,MongoDB输入组件需要以下配置信息:数据源、表、更新信息、字段分隔符、输出字段及映射关系。
- 数据源
数据源信息在dataphin数据源配置,配置完成后在此处可下拉框中选择
- 表
MongoDB数据库存储了表的元数据信息,选择数据源后,该表下拉框会自动列出该数据源下的表名。注意这里默认显示100条,输入表名会进行实时查询匹配
- 更新信息
非必选项,此其时应为加载策略,需有优化文案。用来配置数据写入方式:追加与覆盖。使用的语法遵循Mongodb的标准语法。
- 字段分隔符
特殊分隔符,当且仅当要处理的字符串要用分隔符分隔为字符数组时,才使用这个参数,通过这个参数指定的分隔符,将字符串分隔存储到MongoDB的数组中
- 输出字段
配置表的输出字段,支持批量添加和逐个添加:
- 批量添加:点击批量添加,输入json对象数组,每个json对象表示一个字段,json对象由字段名称及字段 类型构成,字段类型为MongoDB支持的字段类型
- 逐个添加:点击新建输出字段,填写字段名称及字段类型
注:MongoDB是noSQL数据库,没有字段元数据,所以需要手动配置
3 组件使用
本文将重点介绍更新信息(加载策略)的配置。
3.1 追加策略
默认情况,什么都不配置即为追加策略。
当前MongoDB表已存在如下数据如下:存在id=1两条记录
- 界面配置:加载策略为 追加模式(默认)
- 写入数据
可以看到,再次执行写入,数据加倍
3.2 覆盖策略
这里的覆盖效果就是先删除再添加。但是如果表中已存在多条重复的字段,并不会全部覆盖,而是随机的选择一条进行覆盖,这是MongoDB的机制。
注:覆盖策略将会对MongoDB产生的CPU冲击较大,严重是可导致任务超时失败
- 更新信息:{"isReplace":"true", "replaceKey":"id"} 按id覆盖,isReplace为true则覆盖,false仍未追加
- 配置界面:
- 再次执行写入
可以看到,数据无变化,仍然为之前的6条
- 修改输入数据的gmt_create=1111-11-11 11:11:11,查看覆盖情况
可以看到,覆盖并不是将已有数据全部覆盖,而是只覆盖其中一条
4 MongoDB特别注意
MongoDB每个表都有一个系统字段:_id,Object类型,由数据库维护,此字段可被覆盖,但切记不要覆盖此字段,也就是说任何写入MongoDB 表的任务都不应该显示写入 _id 字段,否则破坏该字段的类型,会导致数据集成在读取该表数据时数据切分过程报错或者读取数据不准确。因为MongoDB输入组件在进行数据切分时便是使用该字段,强依赖该字段的Object类型,一旦遇到非Object类型,轻则报错,重则数据读取不准确。