場(chǎng)景:配置分庫(kù)分表離線同步任務(wù)
DataWorks支持通過(guò)向?qū)J交蚰_本模式配置離線同步任務(wù),您可以將分庫(kù)分表數(shù)據(jù)同步至目標(biāo)單表。本文以同步MySQL分庫(kù)分表數(shù)據(jù)為例進(jìn)行說(shuō)明。
前提條件
已準(zhǔn)備好要同步的多個(gè)數(shù)據(jù)源,詳情請(qǐng)參見(jiàn)支持的數(shù)據(jù)源與讀寫插件。
背景信息
您可以使用如下幾種方式實(shí)現(xiàn)分庫(kù)分表離線同步任務(wù),不同方式間差異對(duì)比如下:
差異項(xiàng) | |||
是否支持向?qū)J?/b> | 是 | 是 | 否 |
是否支持按規(guī)則配置表名 | 支持正則表達(dá)式配置源表名,運(yùn)行時(shí)根據(jù)正則搜索匹配表同步。 | 不支持。 | 支持?jǐn)?shù)字范圍配置表名,例如: |
是否要求表結(jié)構(gòu)一致 | 可以配置“字段缺失策略”,允許部分表缺失字段,作為NULL值往下輸出。 | 要求表結(jié)構(gòu)一致。 | |
字段映射參考 | 分庫(kù)分表數(shù)據(jù)源中的Meta數(shù)據(jù)源第一張匹配表。 | 第一個(gè)數(shù)據(jù)源的第一張表。 | 腳本模式手寫。 |
支持的數(shù)據(jù)源數(shù)量 | 分庫(kù)分表數(shù)據(jù)源支持引用最大5000個(gè)數(shù)據(jù)源。 | 建議單節(jié)點(diǎn)配置數(shù)據(jù)源在50個(gè)以內(nèi)。 | |
增加數(shù)據(jù)源是否需要修改、發(fā)布節(jié)點(diǎn) | 無(wú)需修改節(jié)點(diǎn),修改數(shù)據(jù)源后,新運(yùn)行的實(shí)例生效。 | 需要修改任務(wù),增加數(shù)據(jù)源,配置該數(shù)據(jù)源的表名。 | |
支持的數(shù)據(jù)源類型 | MySQL、PolarDB | MySQL、PolarDB、AnalyticDB | MySQL、PolarDB、AnalyticDB、SQLServer、Oracle、PostgreSQL、DM、DB2、Oracle |
分庫(kù)分表數(shù)據(jù)源+向?qū)J?/b>
進(jìn)入數(shù)據(jù)集成頁(yè)面。
登錄DataWorks控制臺(tái),切換至目標(biāo)地域后,單擊左側(cè)導(dǎo)航欄的 ,在下拉框中選擇對(duì)應(yīng)工作空間后單擊進(jìn)入數(shù)據(jù)集成。
在左側(cè)導(dǎo)航欄單擊數(shù)據(jù)源,然后單擊新增數(shù)據(jù)源,選擇數(shù)據(jù)源類型,當(dāng)前此方式支持MySQL和PolarDB。
將每個(gè)分庫(kù)創(chuàng)建為普通數(shù)據(jù)源。本文以MySQL為例,詳細(xì)步驟請(qǐng)參見(jiàn)創(chuàng)建數(shù)據(jù)集成數(shù)據(jù)源。
創(chuàng)建分庫(kù)分表數(shù)據(jù)源,將多個(gè)普通數(shù)據(jù)源合并為一個(gè)數(shù)據(jù)源,作為數(shù)據(jù)同步的數(shù)據(jù)來(lái)源。
單擊新增數(shù)據(jù)源,選擇分庫(kù)分表。
按需選擇分庫(kù)分表數(shù)據(jù)源類型,配置相關(guān)參數(shù)。本文以MySQL(分庫(kù)分表)為例。
關(guān)鍵參數(shù)說(shuō)明:
自定義數(shù)據(jù)源名稱。
選擇數(shù)據(jù)源:選擇已創(chuàng)建的各分庫(kù)普通數(shù)據(jù)源。
Meta數(shù)據(jù)源:分庫(kù)分表同步,所有數(shù)據(jù)源內(nèi)的庫(kù)表結(jié)構(gòu)必須保持一致,請(qǐng)選擇其中一個(gè)數(shù)據(jù)源作為默認(rèn)元數(shù)據(jù)的模板,供配置同步任務(wù)時(shí)拉取默認(rèn)庫(kù)表結(jié)構(gòu)使用。
重要數(shù)據(jù)源內(nèi)的庫(kù)表結(jié)構(gòu)不一致時(shí),后續(xù)同步任務(wù)將會(huì)執(zhí)行報(bào)錯(cuò)。
配置分庫(kù)分表同步任務(wù)。
向?qū)J脚渲梅謳?kù)分表:數(shù)據(jù)來(lái)源選擇MySQL(分庫(kù)分表),然后選擇已創(chuàng)建的分庫(kù)分表數(shù)據(jù)源。完整的任務(wù)配置步驟請(qǐng)參見(jiàn)通過(guò)向?qū)J脚渲秒x線同步任務(wù)。
說(shuō)明本文以MySQL(分庫(kù)分表)為例,實(shí)際配置時(shí)請(qǐng)按需選擇。
單擊下一步。
選擇需要同步的表,保存并發(fā)布,完成后續(xù)步驟。
普通數(shù)據(jù)源+向?qū)J?/b>
將每個(gè)分庫(kù)創(chuàng)建為普通數(shù)據(jù)源。本文以MySQL為例,詳細(xì)步驟請(qǐng)參見(jiàn)創(chuàng)建數(shù)據(jù)集成數(shù)據(jù)源。
配置分庫(kù)分表同步任務(wù)。
向?qū)J脚渲梅謳?kù)分表:在數(shù)據(jù)來(lái)源區(qū)域單擊+編輯數(shù)據(jù)來(lái)源,添加多個(gè)數(shù)據(jù)源。完整的任務(wù)配置步驟請(qǐng)參見(jiàn)通過(guò)向?qū)J脚渲秒x線同步任務(wù)。
將多個(gè)普通數(shù)據(jù)源加入到已選中數(shù)據(jù)源中,單擊確定。
單擊下一步。
選擇每個(gè)數(shù)據(jù)源中需要同步的表,保存并發(fā)布,完成后續(xù)步驟。
腳本模式
配置分庫(kù)分表同步任務(wù)。
腳本模式配置分庫(kù)分表:腳本示例如下,完整的任務(wù)配置步驟請(qǐng)參見(jiàn)通過(guò)腳本模式配置離線同步任務(wù)。
重要實(shí)際運(yùn)行時(shí),請(qǐng)刪除下述代碼中的注釋。
{ "type":"job", "version":"2.0", "steps":[ { "stepType":"mysql", "parameter":{ "envType":0, "column":[ "id", "name" ], "socketTimeout":3600000, "tableComment":"", "connection":[ //根據(jù)分庫(kù)數(shù)配置connection { "datasource":"datasourceName1", //分庫(kù)分表的數(shù)據(jù)源1 "table":[ //分庫(kù)分表的Table列表1 "tb1" ] }, { "datasource":"datasourceName2", //分庫(kù)分表的數(shù)據(jù)源2 "table":[ //分庫(kù)分表的Table列表2 "tb2", "tb3" ] } ], "useSpecialSecret":true,//各個(gè)數(shù)據(jù)源使用各自的密碼 "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" } ] } }