關于從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,否則讀取不到資料。