2條流程解決資料同步到全球部署的N個資料庫

RestCloud發表於2022-05-13

1 、資料同步需求

自動識別源表中資料所歸屬的分公司進行自動同步,即將源表中 A 分公司的資料同步到A 公司資料庫表,源表中B 分公司的資料同步到B 公司資料庫表,以此類推。


2 、實現思路

一般ETL工具實現思路: 建立同步到A分公司流程,抽取源表資料 ->過濾出 A分公司 ->將過濾後的資料載入到 A公司資料庫表。再建立同步到 B分公司流程,有多少個分公司就建立多少條流程。

缺點:開發工作量隨分公司數量成正比,當所有表存在變更時需要對所有 流程進行修改,日常執行監控、維護困難。

優點:當某個分公司資料庫表有變更時,只需要維護對應的流程,不影響其他流程。


Restcloud  ETL 工具實現思路: 建立1個主流程、 1個子流程,主流程用於獲取需要同步的分公司並作為變數引數,並逐個輸出給子流程。子流程獲取主流程的變數引數作為資料過濾條件及動態獲取對應目標資料來源。

主流程工作原理:透過執行 SQL 指令碼做Groupby 分組計算出要同步的分公司並作為變數引數,利用【逐行拆分輸出元件】控制迴圈呼叫子流程,逐個將變數引數傳送給子流程。

建立 1 個子流程,獲取主流程輸出資料作為引數條件抽取需要同步的資料,及需要調取的資料來源。

       

       

缺點:存在一定限制,如要求所有分公司的表名稱、表結構相同。  

優點:工作量小,日常執行監控、維護便捷。

 

3 、示例

3 .1  建立主流程


3.1.1 配置【執行SQL指令碼】元件

配置基本屬性:指定讀取源表的資料來源


配置過濾條件:此處無需過濾資料,下一步跳過該項配置

配置SQL 語句 編寫SQL 已經做 Groupby 分組計算出要同步的分公司並作為變數引數。

如果有儲存分公司名單與資料來源對應程式碼表,此處可以直接用【表輸入】元件獲取


儲存退出,完成【執行SQL 指令碼】配置。


3 .1.2 配置【逐行拆分輸出】元件

 

3 .1.3 配置【子任務】元件

選擇已配置後的子流程,選擇資料流入(接收主流程輸出資料)

 

3 .2  建立子流程


3 .2.1  配置【庫表輸入】

配置基本屬性:指定讀取源表的資料來源

配置SQL 語句:增加資料過濾條件引數

配置輸入欄位:系統自動讀取,無需配置。直接點選儲存退出完成 【庫表輸入】元件配置。


3 .2.2  配置【執行Java 指令碼】

配置基本屬性:無需修改配置,直接下一步。

配置Java 程式碼:程式碼邏輯(透過判斷輸入的引數值獲取對應同步的目標資料來源)

如輸入引數A ,對應同步到資料來源“ Stephen_MySql01 ,  Stephen_MySql01 為配置A 公司的的資料來源名稱。

直接點選編譯並儲存,退出完成 【執行Java 指令碼】元件配置

 

3 .2.3  配置【庫表輸出】

配置基本屬性:指定讀取源表的資料來源(此處根據引數動態獲取指定輸出資料來源)

配置輸出欄位:根據目標表的欄位情況,手工點選新增列完成輸出欄位配置。

由於資料來源是動態原因,流程在不執行情況下無法獲取到對應表,因此無法自動獲取表結構。

輸出欄位配置完成後,點選儲存完成 【庫表輸出】配置。

 

3 .3  測試

3 .3.1 用例資料

源表資料如下:

     


3 .3.2 效果要求:

address   為“廣州”的資料同步到 mysql資料庫

address   “上海”的資料同步到 SQL serve 資料庫

address   為“北京”的資料同步到 Postgres 資料庫

 

3 .3.3 執行結果

資料庫結果

標識為“廣州”的,就將該條資料插入到 mysql 資料庫

 

標識為 “上海” 的,就將該條資料插入到SQL server 資料庫

 

標識為 “北京” 的,就將該條資料插入到postgres 資料庫


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70005218/viewspace-2894001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章