全部產品
Search
文件中心

DataWorks:情境:配置分庫分表離線同步任務

更新時間:Nov 16, 2024

DataWorks支援通過嚮導模式或指令碼模式配置離線同步任務,您可以將分庫分表資料同步至目標單表。本文以同步MySQL分庫分表資料為例進行說明。

前提條件

已準備好要同步的多個資料來源,詳情請參見支援的資料來源與讀寫外掛程式

背景資訊

您可以使用如下幾種方式實現分庫分表離線同步任務,不同方式間差異對比如下:

差異項

分庫分表資料來源+嚮導模式(推薦)

普通資料來源+嚮導模式

指令碼模式

是否支援嚮導模式

是否支援按規則配置表名

支援Regex配置源表名,運行時根據正則搜尋匹配表同步。

不支援。

支援數字範圍配置表名,例如:tb_[1-10]。要求連續且每個子表存在。

是否要求表結構一致

可以配置“欄位缺失策略”,允許部分表缺失欄位,作為NULL值往下輸出。

要求表結構一致。

欄位對應參考

分庫分表資料來源中的Meta資料來源第一張匹配表。

第一個資料來源的第一張表。

指令碼模式手寫。

支援的資料來源數量

分庫分表資料來源支援引用最大5000個資料來源。

建議單節點配置資料來源在50個以內。

增加資料來源是否需要修改、發布節點

無需修改節點,修改資料來源後,新啟動並執行執行個體生效。

需要修改任務,增加資料來源,配置該資料來源的表名。

支援的資料來源類型

MySQL、PolarDB

MySQL、PolarDB、AnalyticDB

MySQL、PolarDB、AnalyticDB、SQLServer、Oracle、PostgreSQL、DM、DB2、Oracle

分庫分表資料來源+嚮導模式

  1. 進入Data Integration頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料開發與治理 > Data Integration,在下拉框中選擇對應工作空間後單擊進入Data Integration

  2. 在左側導覽列單擊資料來源,然後單擊新增資料來源,選擇資料來源類型,當前此方式支援MySQL和PolarDB。

  3. 將每個分庫建立為普通資料來源。本文以MySQL為例,詳細步驟請參見建立Data Integration資料來源

    image

  4. 建立分庫分表資料來源,將多個普通資料來源合并為一個資料來源,作為資料同步的資料來源。

    1. 單擊新增資料來源,選擇分庫分表image

    2. 按需選擇分庫分表資料來源類型,配置相關參數。本文以MySQL(分庫分表)為例。

      image

      關鍵參數說明:

      • 自訂資料來源名稱

      • 選擇資料來源:選擇已建立的各分庫普通資料來源。

      • Meta資料來源:分庫分表同步,所有資料來源內的庫表結構必須保持一致,請選擇其中一個資料來源作為預設中繼資料的模板,供配置同步任務時拉取預設庫表結構使用。

        重要

        資料來源內的庫表結構不一致時,後續同步任務將會執行報錯。

  5. 建立離線同步節點

  6. 配置分庫分表同步任務。

    嚮導模式配置分庫分表:資料來源選擇MySQL(分庫分表),然後選擇已建立的分庫分表資料來源。完整的任務配置步驟請參見通過嚮導模式配置離線同步任務

    說明

    本文以MySQL(分庫分表)為例,實際配置時請按需選擇。

    image

  7. 單擊下一步

  8. 選擇需要同步的表,儲存發布,完成後續步驟。

    image

普通資料來源+嚮導模式

  1. 將每個分庫建立為普通資料來源。本文以MySQL為例,詳細步驟請參見建立Data Integration資料來源

    image

  2. 建立離線同步節點

  3. 配置分庫分表同步任務。

    嚮導模式配置分庫分表:在資料來源地區單擊+編輯資料來源,添加多個資料來源。完整的任務配置步驟請參見通過嚮導模式配置離線同步任務

    image

  4. 將多個普通資料來源加入到已選中資料來源中,單擊確定

    image

  5. 單擊下一步

  6. 選擇每個資料來源中需要同步的表,儲存發布,完成後續步驟。

    image

指令碼模式

  1. 建立離線同步節點

  2. 配置分庫分表同步任務。

    指令碼模式配置分庫分表:指令碼樣本如下,完整的任務配置步驟請參見通過指令碼模式配置離線同步任務

    重要

    實際運行時,請刪除下述代碼中的注釋。

    {
        "type":"job",
        "version":"2.0",
        "steps":[
            {
                "stepType":"mysql",
                "parameter":{
                    "envType":0,
                    "column":[
                        "id",
                        "name"
                    ],
                    "socketTimeout":3600000,
                    "tableComment":"",
                    "connection":[    //根據分庫數配置connection
                        {
                            "datasource":"datasourceName1",  //分庫分表的資料來源1
                            "table":[           //分庫分表的Table列表1
                                "tb1"
                            ]
                        },
                        {
                            "datasource":"datasourceName2", //分庫分表的資料來源2
                            "table":[          //分庫分表的Table列表2
                                "tb2",
                                "tb3"
                            ]
                        }
                    ],
                    "useSpecialSecret":true,//各個資料來源使用各自的密碼
                    "where":"",
                    "splitPk":"id",
                    "encoding":"UTF-8"
                    },
                "name":"Reader",
                "category":"reader"
                },
            {
                "stepType":"odps",
                "parameter":{
                    "partition":"pt=${bizdate}",
                    "truncate":true,
                    "datasource":"odpsname",
                    "envType":0,
                    "isSupportThreeModel":false,
                    "column":[
                        "id",
                        "name"
                    ],
                    "emptyAsNull":false,
                    "tableComment":"",
                    "table":"t1",
                    "consistencyCommit":false
                    },
                "name":"Writer",
                "category":"writer"
                }
        ],
        "setting":{
            "executeMode":null,
            "errorLimit":{
                "record":""
                },
            "speed":{
                "concurrent":2,
                "throttle":false
                }
        },
        "order":{
            "hops":[
                {
                    "from":"Reader",
                    "to":"Writer"
                    }
            ]
        }
    }