MongoDB数据源为您提供读取和写入MongoDB双向通道的功能,本文为您介绍DataWorks的MongoDB数据同步的能力支持情况。
支持的版本
仅支持4.x、5.x版本的MongoDB。
使用限制
数据集成支持使用MongoDB数据库对应账号进行连接,如果您使用的是云数据库MongoDB版,默认会有一个root账号。出于安全策略的考虑,在添加使用MongoDB数据源时,请避免使用root作为访问账号。
如果MongoDB为分片集群,则在配置数据源时,需要配置mongos地址,避免配置mongod/shard节点地址。否则同步任务在抽取MongoDB中数据时,可能会导致只查询到指定shard的数据,而非预期的全集。关于mongos、mongod,详情请参考mongos、mongod。
暂不支持MongoDB主备集群。
在并发大于1的情况下,同步任务配置的集合中所有
_id
字段类型必须一致(例如,_id
字段都为string类型或者ObjectId类型),否则会出现部分数据无法同步的问题。并发大于1时,任务拆分会使用
_id
字段进行划分,因而在此场景下_id
字段不支持混合类型。如果_id
有多种字段类型,您可以使用单并发的形式进行数据同步,且不配置splitFactor或splitFactor配置为1。
数据集成本身不支持数组类型,但MongoDB支持数组类型,并且数组类型具有强大的索引功能。您可以通过参数的特殊配置,将字符串转换为MongoDB中的数组。转换类型后,即可并行写入MongoDB。
自建MongoDB数据库不支持公网访问,仅支持阿里云内网访问。
暂不支持基于Docker部署的MongoDB集群。
数据集成目前不支持在数据查询(参数query)配置中读取指定列的数据。
离线同步任务中,如果MongoDB无法获取字段结构,将默认按照6个字段生成字段映射,字段名分别为
col1
,col2
,col3
,col4
,col5
,col6
。在同步任务运行时,默认优先使用
splitVector
命令进行任务分片,在部分MongoDB版本中,不支持splitVector
命令,进而会导致报错no such cmd splitVector
,您可以在同步任务配置中,单击按钮,进入脚本模式,在MongoDB的parameter配置中,增加以下参数,避免使用
splitVector
。"useSplitVector" : false
支持的字段类型
MongoDB Reader支持的MongoDB数据类型
数据集成支持大部分MongoDB类型,但也存在部分没有支持的情况,请注意检查您的数据类型。
对于支持读取的数据类型,数据集成在读取时:
基本类型的数据,会根据同步任务配置的读取字段(column,详见下文的附录:MongoDB脚本Demo与参数说明)中的name自动读取对应path下的数据,并根据数据类型做自动转换,您无需指定column的type属性。
类型
离线读(MongoDB Reader)
说明
类型
离线读(MongoDB Reader)
说明
ObjectId
支持
对象ID类型。
Double
支持
64位浮点数类型。
32-bit integer
支持
32位整数。
64-bit integer
支持
64位整数。
Decimal128
支持
Decimal128类型。
如果配置为嵌套类型、Combine类型,JSON序列化时会被当做对象处理,需增加参数
decimal128OutputType
为bigDecimal
,才能输出为decimal。String
支持
字符串类型。
Boolean
支持
布尔类型。
Timestamp
支持
时间戳类型。
BsonTimestamp存储的是时间戳,无需考虑时区影响,详情请参见MongoDB中的时区问题。
Date
支持
日期类型。
部分复杂类型的数据,您可通过配置column的type属性,进行自定义处理。
类型
离线读(MongoDB Reader)
说明
类型
离线读(MongoDB Reader)
说明
Document
支持
嵌入文档类型。
如果没有配置type属性,则直接将Document转JSON序列化处理。
如果配置了type属性为
document
,则属于嵌套类型,MongoDB Reader会按path读取Document属性。详细示例请参见下文的数据类型示例2:递归解析处理多层嵌套的Document。
Array
支持
数组类型。
如果type配置为
array.json
、arrays
,直接JSON序列化处理。如果type配置为
array
、document.array
,则拼接为字符串,分隔符(column中的splitter)默认为英文逗号。
数据集成本身不支持数组类型,但MongoDB支持数组类型,并且数组类型具有强大的索引功能。您可以通过参数的特殊配置,将字符串转换为MongoDB中的数组。转换类型后,即可并行写入MongoDB。
数据集成特殊数据类型:combine
类型 | 离线读(MongoDB Reader) | 说明 |
类型 | 离线读(MongoDB Reader) | 说明 |
Combine | 支持 | 数据集成自定义类型。 如果type配置为 |
MongoDB Reader数据类型转换
结合上文可见,MongoDB Reader针对MongoDB类型的转换列表,如下表所示。
转换后的类型分类 | MongoDB数据类型 |
转换后的类型分类 | MongoDB数据类型 |
LONG | INT、LONG、document.INT和document.LONG |
DOUBLE | DOUBLE和document.DOUBLE |
STRING | STRING、ARRAY、document.STRING、document.ARRAY和COMBINE |
DATE | DATE和document.DATE |
BOOLEAN | BOOL和document.BOOL |
BYTES | BYTES和document.BYTES |
MongoDB Writer数据类型转换
类型分类 | MongoDB数据类型 |
类型分类 | MongoDB数据类型 |
整数类 | INT和LONG |
浮点类 | DOUBLE |
字符串类 | STRING和ARRAY |
日期时间类 | DATE |
布尔型 | BOOL |
二进制类 | BYTES |
数据类型示例1:Combine类型使用示例
MongoDB Reader插件的Combine数据类型支持将MongoDB document中的多个字段合并成一个JSON串。例如,导入MongoDB中的字段至MaxCompute,有字段如下(下文均省略了value使用key来代替整个字段)的三个document,其中a、b是所有document均有的公共字段,x_n是不固定字段。
doc1: a b x_1 x_2
doc2: a b x_2 x_3 x_4
doc3: a b x_5
配置文件中要明确指出需要一一对应的字段,需要合并的字段则需另取名称(不可以与document中已存在字段同名),并指定类型为COMBINE,如下所示。
"column": [
{
"name": "a",
"type": "string",
},
{
"name": "b",
"type": "string",
},
{
"name": "doc",
"type": "combine",
}
]
最终导出的MaxCompute结果如下所示。
odps_column1 | odps_column2 | odps_column3 |
odps_column1 | odps_column2 | odps_column3 |
a | b | {x_1,x_2} |
a | b | {x_2,x_3,x_4} |
a | b | {x_5} |
使用COMBINE类型合并MongoDB Document中的多个字段后,输出结果映射至MaxCompute时会自动删除公共字段,仅保留Document的特有字段。
例如,a、b为所有Document均有的公共字段,Document文件doc1: a b x_1 x_2
使用COMBINE类型合并字段后,输出结果本应该为{a,b,x_1,x_2},该结果映射至MaxCompute后,会删除公共字段a和b,最终输出的结果为{x_1,x_2}。
数据类型示例2:递归解析处理多层嵌套的Document
当MongoDB中Document存在多层嵌套时,可通过配置document类型进行递归解析处理。示例如下:
MongoDB源端数据为:
{ "name": "name1", "a": { "b": { "c": "this is value" } } }
MongoDB列可配置为:
{"name":"_id","type":"string"} {"name":"name","type":"string"} {"name":"a.b.c","type":"document"}
如上配置,可将源端嵌套字段a.b.c的值写入目标端c字段中,同步任务运行后,目标端写入数据为this is value
。
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
操作流程请参见通过向导模式配置离线同步任务、通过脚本模式配置离线同步任务。
脚本模式配置的全量参数和脚本Demo请参见下文的附录:MongoDB脚本Demo与参数说明。
单表实时同步任务配置指导
操作流程请参见配置单表增量数据实时同步、DataStudio侧实时同步任务配置。
整库级别同步任务配置指导
整库离线、整库(实时)全增量、整库(实时)分库分表等整库级别同步任务的配置操作,请参见数据集成侧同步任务配置。
最佳实践
常见问题
附录:MongoDB脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
- 本页导读 (1)
- 支持的版本
- 使用限制
- 支持的字段类型
- MongoDB Reader支持的MongoDB数据类型
- 数据集成特殊数据类型:combine
- MongoDB Reader数据类型转换
- MongoDB Writer数据类型转换
- 数据类型示例1:Combine类型使用示例
- 数据类型示例2:递归解析处理多层嵌套的Document
- 创建数据源
- 数据同步任务开发
- 单表离线同步任务配置指导
- 单表实时同步任务配置指导
- 整库级别同步任务配置指导
- 最佳实践
- 常见问题
- 附录:MongoDB脚本Demo与参数说明
- 离线任务脚本配置方式
- Reader脚本Demo
- Reader脚本参数
- Writer脚本Demo
- Writer脚本参数