業(yè)務背景:
簡化敘述,需要將公有云上的多個mysql數據庫,抽取到內網某oracle單庫中。
具體實現過程
1.由于之前沒怎么用過etl工具,但是通過查閱資料發(fā)現kettle簡單易上手,所以就是用kettle作為此次抽取的etl tools,剛開始是想先實驗一下,將云上的單個庫中的單張表作為抽取對象抽取到oracle中。

單表抽取
(1)表輸入中要定義步驟名,選擇你連的mysql數據庫(首次選擇數據庫連接,需要新建數據庫連接),再在sql中寫上你要導出的表字段。

表輸入配置

數據庫新建連接
(2)編輯表輸出,選擇或新建數據庫連接(就是你本地的oracle數據庫),選擇對應的業(yè)務表。

表輸出
如果mysql跟oracle上兩張表個別字段不一致,還可以通過配置定義表字段的對應關系。

字段對應關系配置
當兩邊都配置好之后點擊運行這個轉換,bingo,數據就抽取下來了。
2.由于此次抽取的特點是多庫多表數據量大,所以通過這種單一運行轉換的方式效率極低,所以想通過循環(huán)執(zhí)行的方式來代替這種單一抽取模式。前提需要說明,所有的目標表跟本地庫中的表,字段大致相同,所以我采用模板方式。
其中的演化過程就不說了,說一下最后的結果。

批量數據抽取
啟動和結束沒有什么好說的,說一下最關鍵的兩個轉換:
獲取同步表名_dm,這個轉換主要是將我需要抽取的表信息都獲取到(也就是oracle庫中所有要抽取的表信息),主要是為了獲取表名。
獲取到了表名之后,通過循環(huán)表名,一個接一個的先執(zhí)行清空oracle表數據,再執(zhí)行抽取實際抽取操作。數據抽取_dm到判斷標量這里使用了恒定執(zhí)行,而不是綠色的成功執(zhí)行,是因為在循環(huán)過程中,如果有抽取失敗的話,會停止執(zhí)行。清空操作前面加了寫日志也是為了方便查看具體是那個表出現了報錯。最后當循環(huán)結束之后,執(zhí)行操作結束。
這是第一次寫抽取的總結,還有很多不夠完善的地方,但后續(xù)如果大家有什么不明白的可以找我,我會盡力幫助大家答疑。