DataWorks支援通過嚮導模式或指令碼模式配置離線同步任務,您可以將分庫分表資料同步至目標單表。本文以同步MySQL分庫分表資料為例進行說明。
前提條件
已準備好要同步的多個資料來源,詳情請參見支援的資料來源與讀寫外掛程式。
功能介紹
您可以使用如下幾種方式實現分庫分表離線同步任務,不同方式間差異對比如下:
|
差異項 |
分庫分表資料來源+嚮導模式(推薦) |
||
|
是否支援嚮導模式 |
是 |
是 |
否 |
|
是否支援按規則配置表名 |
支援Regex配置源表名,運行時根據正則搜尋匹配表同步。 |
不支援。 |
支援數字範圍配置表名,例如: |
|
是否要求表結構一致 |
可以配置“欄位缺失策略”,允許部分表缺失欄位,作為NULL值往下輸出。 |
要求表結構一致。 |
|
|
欄位對應參考 |
分庫分表資料來源中的Meta資料來源第一張匹配表。 |
第一個資料來源的第一張表。 |
指令碼模式手寫。 |
|
支援的資料來源數量 |
分庫分表資料來源支援引用最大5000個資料來源。 |
建議單節點配置資料來源在50個以內。 |
|
|
增加資料來源是否需要修改、發布節點 |
無需修改節點,修改資料來源後,新啟動並執行執行個體生效。 |
需要修改任務,增加資料來源,配置該資料來源的表名。 |
|
|
支援的資料來源類型 |
MySQL、PolarDB、PolarDB-O、OceanBase |
MySQL、PolarDB、AnalyticDB、OceanBase |
MySQL、PolarDB、AnalyticDB、SQLServer、Oracle、PostgreSQL、DM、DB2、Oracle、OceanBase |
分庫分表資料來源+嚮導模式
進入Data Integration頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入Data Integration。
-
在左側導覽列單擊数据源,然後單擊新增數據源,選擇資料來源類型,當前此方式支援MySQL、PolarDB和PolarDB-O。
-
將每個分庫建立為普通資料來源。本文以MySQL為例,詳細步驟請參見資料來源配置。
建立完成後,在資料來源列表頁面可看到每個分庫對應的MySQL資料來源,例如資料來源名稱為MySQL_20241114,對應資料庫名
user_info_20241114。 -
建立分庫分表資料來源,將多個普通資料來源合并為一個資料來源,作為資料同步的資料來源。
-
單擊新增數據源,選擇分庫分表。在新增資料來源對話方塊中,單擊分庫分表分類標籤,可選的資料來源類型包括MySQL(分庫分表)、PolarDB-O(分庫分表)和PolarDB(分庫分表)。
-
按需選擇分庫分表資料來源類型,配置相關參數。本文以MySQL(分庫分表)為例。
在資料來源名稱中輸入名稱(如
Database_and_Table_Sharding_of_MySQL),配置完成後單擊完成建立分庫分表資料來源。關鍵參數說明:
-
自訂數據源名稱。
-
選擇資料來源:選擇已建立的各分庫普通資料來源。
-
Meta資料來源:分庫分表同步,所有資料來源內的庫表結構必須保持一致,請選擇其中一個資料來源作為預設中繼資料的模板,供配置同步任務時拉取預設庫表結構使用。
重要資料來源內的庫表結構不一致時,後續同步任務將會執行報錯。
-
-
-
配置分庫分表同步任務。
嚮導模式配置分庫分表:數據來源選擇MySQL(分庫分表),然後選擇已建立的分庫分表資料來源。完整的任務配置步驟請參見嚮導模式配置。
說明本文以MySQL(分庫分表)為例,實際配置時請按需選擇。
網路連通性測試頁面顯示資料來來源資料源名稱為 Database_and_Table_Sharding_of_MySQL,資源群組為 Serveless_Resource(華東2-上海,隨用隨付,佔用0.5 CU),資料去向選擇 MaxCompute(ODPS) 類型、資料來源名稱為 doc_test_project,三者網路連通性測試均顯示可連通。
-
單擊下一步。
-
選擇需要同步的表,保存並发布,完成後續步驟。
在配置資料來源與去向頁面的步驟2配置任務中,左側資料來源地區選取項目資料來源為MySQL(分庫分表),選表方式為固定選表,表選擇user_info,切分鍵填寫id(分庫分表要求所有表的結構必須保持一致,否則執行報錯)。右側資料去向地區選取項目資料來源為MaxCompute(ODPS),表名為user_info,分區資訊填寫
pt=${bizdate},寫入模式選擇寫入前清理已有資料(Insert Overwrite),Null 字元串轉為Null寫入選擇否。
普通資料來源+嚮導模式
-
將每個分庫建立為普通資料來源。本文以MySQL為例,詳細步驟請參見資料來源配置。
-
配置分庫分表同步任務。
嚮導模式配置分庫分表:在數據來源地區單擊+編輯資料來源,在彈出的資料來源選擇面板中勾選並添加多個分庫對應的資料來源。完整的任務配置步驟請參見嚮導模式配置。
-
將多個普通資料來源加入到已選中數據源中,單擊確定。
-
單擊下一步。
-
選擇每個資料來源中需要同步的表,保存並发布,完成後續步驟。
重要此配置中,分庫分錶數據源使用相同賬號密碼選項會預設勾選,表示所有分庫分表資料來源將使用第一個資料來源中配置的賬戶和密碼去訪問資料庫。如果您的分庫分表資料庫使用的帳號密碼不同,請取消勾選,使用各自資料來源配置中的賬戶和密碼去訪問資料庫。
在配置資料來源與去向頁面,左側資料來源地區配置了三個MySQL分庫分表資料來源(如MySQL_20241112、MySQL_20241114、MySQL_20241113),每個資料來源均選擇user_info表。頁面顯示警告"分庫分表要求:所有表的schema必須保持一致,否則執行報錯"。右側資料去向地區選取項目MaxCompute(ODPS)資料來源,表為user_info,分區資訊設定為
pt=${bizdate},寫入模式為寫入前清理已有資料 (Insert Overwrite)。
指令碼模式
-
配置分庫分表同步任務。
指令碼模式配置分庫分表:指令碼樣本如下,完整的任務配置步驟請參見指令碼模式配置。
重要實際運行時,請刪除下述代碼中的注釋。
{ "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" } ] } }
常見問題
分庫分表資料來源建立成功後,在同步節點的資料來源下拉式功能表中不可見,介面返回610002錯誤碼
現象:建立分庫分表資料來源後,在資料同步節點的資料來源下拉式功能表中無法看到該資料來源,介面/di/getDataSourceList返回code:610002。
原因:該問題為系統髒資料導致的已知問題,僅影響分庫分表類型的資料來源,MySQL、PolarDB等普通資料來源不受影響。
解決方案:提交工單並提供工作空間ID和資料來源名稱,由DataWorks後端團隊排查並清理髒資料。
員工離職後分庫分表同步任務失敗,同步節點中找不到已配置的分庫分表資料來源
現象:員工離職後,其建立的分庫分表資料同步任務從正常運行變為失敗。在同步節點中無法找到之前配置的分庫分表資料來源,但該資料來源在資料來源中心仍可查看且測試連接正常。修改任務責任人後問題依然存在。
原因:該問題為系統髒資料導致,與資料來源建立者的帳號狀態變更(如離職)相關。髒資料導致分庫分表資料來源在同步節點的資料來源列表介面中無法正常返回。
解決方案:提交工單並提供工作空間ID和資料來源名稱,由DataWorks後端團隊排查並清理髒資料。清理完成後,分庫分表資料來源將恢複可見,同步任務可正常運行。