1、數據同步需求
自動識別源表中數據所歸屬的分公司進行自動同步,即將源表中A分公司的數據同步到A公司數據庫表,源表中B分公司的數據同步到B公司數據庫表,以此類推。
2、實現思路
一般ETL工具實現思路:建立同步到A分公司流程,抽取源表數據->過濾出A分公司->將過濾后的數據加載到A公司數據庫表。再建立同步到B分公司流程,有多少個分公司就建立多少條流程。
缺點:開發(fā)工作量隨分公司數量成正比,當所有表存在變更時需要對所有流程進行修改,日常運行監(jiān)控、維護困難。
優(yōu)點:當某個分公司數據庫表有變更時,只需要維護對應的流程,不影響其他流程。
Restcloud ETL工具實現思路:創(chuàng)建1個主流程、1個子流程,主流程用于獲取需要同步的分公司并作為變量參數,并逐個輸出給子流程。子流程獲取主流程的變量參數作為數據過濾條件及動態(tài)獲取對應目標數據源。
主流程工作原理:通過執(zhí)行SQL腳本做Groupby分組計算出要同步的分公司并作為變量參數,利用【逐行拆分輸出組件】控制循環(huán)調用子流程,逐個將變量參數傳送給子流程。
創(chuàng)建1個子流程,獲取主流程輸出數據作為參數條件抽取需要同步的數據,及需要調取的數據源。
缺點:存在一定限制,如要求所有分公司的表名稱、表結構相同。
優(yōu)點:工作量小,日常運行監(jiān)控、維護便捷。
3、示例
3.1建立主流程
3.1.1配置【執(zhí)行SQL腳本】組件
配置基本屬性:指定讀取源表的數據源
配置過濾條件:此處無需過濾數據,下一步跳過該項配置
配置SQL語句:編寫SQL已經做Groupby分組計算出要同步的分公司并作為變量參數。
如果有存儲分公司名單與數據源對應代碼表,此處可以直接用【表輸入】組件獲取
保存退出,完成【執(zhí)行SQL腳本】配置。
3.1.2配置【逐行拆分輸出】組件
3.1.3配置【子任務】組件
選擇已配置后的子流程,選擇數據流入(接收主流程輸出數據)
3.2建立子流程
3.2.1配置【庫表輸入】
配置基本屬性:指定讀取源表的數據源
配置SQL語句:增加數據過濾條件參數
配置輸入字段:系統(tǒng)自動讀取,無需配置。直接點擊保存退出完成【庫表輸入】組件配置。
3.2.2配置【執(zhí)行Java腳本】
配置基本屬性:無需修改配置,直接下一步。
配置Java代碼:代碼邏輯(通過判斷輸入的參數值獲取對應同步的目標數據源)
如輸入參數A,對應同步到數據源“Stephen_MySql01”, Stephen_MySql01為配置A公司的的數據源名稱。
直接點擊編譯并保存,退出完成【執(zhí)行Java腳本】組件配置
3.2.3配置【庫表輸出】
配置基本屬性:指定讀取源表的數據源(此處根據參數動態(tài)獲取指定輸出數據源)
配置輸出字段:根據目標表的字段情況,手工點擊新增列完成輸出字段配置。
由于數據源是動態(tài)原因,流程在不運行情況下無法獲取到對應表,因此無法自動獲取表結構。
輸出字段配置完成后,點擊保存完成【庫表輸出】配置。
3.3測試
3.3.1用例數據
源表數據如下:
3.3.2效果要求:
address為“廣州”的數據同步到mysql數據庫
address為“上海”的數據同步到SQL serve數據庫
address為“北京”的數據同步到Postgres數據庫
3.3.3運行結果
數據庫結果
標識為“廣州”的,就將該條數據插入到mysql數據庫
標識為“上海”的,就將該條數據插入到SQL server數據庫
標識為“北京”的,就將該條數據插入到postgres數據庫
(免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )