天天看點

關于從MongoDB讀取資料到MaxCompute的實踐

關于從MongoDB讀取資料到MaxCompute的實踐

主要步驟請參考以下幾篇阿裡雲的操作手冊,這裡主要突出一些容易翻車的地方。

  1. 操作文檔

    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

  2. 翻車點

    本文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,否則讀取不到資料。

繼續閱讀