JSON數據從MongoDB遷移到MaxCompute最佳實踐
數據及賬號準備
首先您需要將數據上傳至您的MongoDB數據庫。本例中使用阿裏雲的雲數據庫 MongoDB 版,網絡類型為VPC(需申請公網地址,否則無法與DataWorks默認資源組互通),測試數據如下。
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
},
{
"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",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
登錄MongoDB的DMS控制臺,本例中使用的數據庫為 admin,集合為 userlog,您可以在查詢窗口使用db.userlog.find().limit(10)命令查看已上傳好的數據,如下圖所示。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/c0dbc5f063cea1c7a7687eeff9210172.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
此外,需提前在數據庫內新建用戶,用於DataWorks添加數據源。本例中使用命令db.createUser({user:"bookuser",pwd:"123456",roles:["root"]}),新建用戶名為 bookuser,密碼為 123456,權限為root。
新增MongoDB數據源
進入DataWorks數據集成控制臺,新增MongoDB類型數據源。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/65dc98c95fb2ebafed8612d0d6b8a15a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
具體參數如下所示,測試數據源連通性通過即可點擊完成。由於本文中MongoDB處於VPC環境下,因此 數據源類型需選擇 有公網IP。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/f3d6c783f73c52c8af0b639d0174efbb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
訪問地址及端口號可通過在MongoDB管理控制臺點擊實例名稱獲取,如下圖所示。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/67ebf4544d600051353f6d5be974fb66.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
新建數據同步任務
在DataWorks上新建數據同步類型節點。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/7e3c0c4842fe4d187e85c695372c8fed.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
新建的同時,在DataWorks新建一個建表任務,用於存放JSON數據,本例中新建表名為mqdata。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/33a67b21be4bfee04a6d5d6f28ace510.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
表參數可以通過圖形化界面完成。本例中mqdata表僅有一列,類型為string,列名為MQ data。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/4a34f066679acfb761d6a356bcc781ce.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
完成上述新建後,您可以在圖形化界面進行數據同步任務參數的初步配置,如下圖所示。選擇目標數據源名稱為odps_first,選擇目標表為剛建立的mqdata。數據來源類型為MongoDB,選擇我們剛創建的數據源mongodb_userlog。完成上述配置後, 點擊轉換為腳本,跳轉到腳本模式。
![技術分享圖片](http://i2.51cto.com/images/blog/201811/30/574151b9130bffe8bd457fdcf257df1a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
腳本模式代碼示例如下。
{
"type": "job",
"steps": [
{
"stepType": "mongodb",
"parameter": {
"datasource": "mongodb_userlog",
//數據源名稱
"column": [
{
"name": "store.bicycle.color", //JSON字段路徑,本例中提取color值
"type": "document.document.string" //本欄目的字段數需和name一致。假如您選取的JSON字段為一級字段,如本例中的expensive,則直接填寫string即可。
}
],
"collectionName //集合名稱": "userlog"
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "odps",
"parameter": {
"partition": "",
"isCompress": false,
"truncate": true,
"datasource": "odps_first",
"column": [
//MaxCompute表列名 "mqdata"
],
"emptyAsNull": false,
"table": "mqdata"
},
"name": "Writer",
"category": "writer"
}
],
"version": "2.0",
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
},
"setting": {
"errorLimit": {
"record": ""
},
"speed": {
"concurrent": 2,
"throttle": false,
"dmu": 1
}
}
}
完成上述配置後,點擊運行接即可。運行成功日誌示例如下所示。
結果驗證
在您的業務流程中新建一個ODPS SQL節點。
您可以輸入 SELECT * from mqdata;語句,查看當前mqdata表中數據。當然這一步您也可以直接在MaxCompute客戶端中輸入命令運行。
JSON數據從MongoDB遷移到MaxCompute最佳實踐