关于从MongoDB读取数据到MaxCompute的实践
主要步骤请参考以下几篇阿里云的操作手册,这里主要突出一些容易翻车的地方。
-
操作文档
1.1. JSON数据从MangoDB迁移至MaxCompute
https://help.aliyun.com/document_detail/98009.html
1.2. MongoDB Reader
https://help.aliyun.com/knowledge_detail/137723.html?spm=a1z3jh.13523495.0.0.27af6242QjHuK5#title-pl1-a31-zmh
1.3. MaxCompute Writer
https://help.aliyun.com/knowledge_detail/137466.html?spm=a1z3jh.13523495.0.0.27af6242u433mo -
翻车点
本文MongoDB的json字符串用例为:
{
"store":{
"book":[
{
"category":"reference",
"author":"Nigel Rees",
"title":"Sayings of the Century",
"price":8.95
},
{
"category":"fiction",
"author":"Evelyn Waugh",
"title":"Sword of Honour",
"price":12.99
},
{
"category":"fiction",
"author":"J. R. R. Tolkien",
"title":"The Lord of the Rings",
"isbn":"0-395-19395-8",
"price":22.99
}
],
"bicycle":{
"color":"red",
"price":19.95
}
},
"expensive":10
}
本例采用脚本的形式将json文件读取到MaxCompute中:
{
"type": "job",
"steps": [
//读取json的配置脚本
{
"stepType": "mongodb", //数据源类型
"name": "Reader",
"category": "reader",
"parameter": {
"datasource": "mongodb_userlog", //数据源名称
"collectionName": "userlog", //集合名称。
"query": "{'$gte','2019-02-04'}", //数据查询过滤,只支持时间类型
"column": [
{
"name": "store.bicycle.color", //JSON字段路径,本例中提取color值。
"type": "document.String" //非一层子属性以最终获取的类型为准。假如您选取的JSON字段为一级字段,例如本例中的expensive,则直接填写string即可。
}
]
}
},
//写入到MaxCompute的配置脚本
{
"stepType": "odps",
"name": "Writer",
"category": "writer",
"parameter": {
"table": "mqdata", //MaxCompute表名
"partition": "", //设置分区
"isCompress": false, //是否压缩
"truncate": true, //写入数据前是否对原数据进行清除
"datasource": "odps_first",
"column": [
"mqdata" //MaxCompute表列名。
],
"emptyAsNull": false //空字符串是否作为null
}
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": "" //错误记录数,表示脏数据的最大容忍条数。
},
"speed": {
"concurrent": 2, //作业并发度
"throttle": false //是否限流
}
}
}
2.1. MongoDB Reader中需要注意的地方
query只支持时间类型。
MongoDB严格区分大小写,所以在读取json文件时,字段必须大小写完全一致。
当读取MongoDB的json文件具有集群模式,存在切片的情况下,任务并行度只能设置为1,查询语句不能使用。
2.2. MaxCompute Writer中需要注意的地方
表字段内容的写入和读取的顺序完全一致,和表的列名没有任何关系,注意做到顺序的一一对应。
当读取MongoDB的json文件具有集群模式,存在切片的情况下,任务并行度只能设置为1,否则读取不到数据。