1. 程式人生 > >資料抽取工具Kettle使用

資料抽取工具Kettle使用

在我們開發的過程中,經常碰到多個系統之間需要相互抽取資料的問題,以往我們可以通過寫Webservices介面,或者FTP共享來完成,但是這樣會存在工作量大,不便於維護,效能不高的問題。今天介紹一款常用的資料抽取工具—-Kettle。
Kettle是一款國外開源的ETL工具,純Java編寫,可以在Window、Linux、Unix上執行,資料抽取高效穩定。下面我們使用一個Demo程式介紹下其常用元件。

需求

有一個社交類的產品,進行了一次架構變更,資料庫表結構模型發生變化了,從老系統升級到新系統時,要把老系統中資料遷移到新系統的資料庫裡。
下面我們拿群組表資料做個Demo演示資料遷移過程。
1. 現狀:
老系統


群組表:group
群組成員表:user_group
新系統
群組表:group_分表,
群組成員表:group_members_分表
我的群組表:mygroups_分表
2. 步驟邏輯梳理
old:老系統
new:新系統
查詢群組(old)->建立群組,群組成員,我的群組分表(new)->插入群組資料(new)->插入群組成員資料(new)

資料遷移

2.查詢群組(old)- 表輸入
當我們需要查詢表資料時,需要用到表輸入元件這裡寫圖片描述
新建轉換,選擇 輸入->表輸入,雙擊 到 轉換畫板,開啟輸入以下資訊:
步驟名稱:步驟名稱標識,不能重複
資料庫連線: 要連線的資料庫,如果沒有,新建一個
SQL語句:輸入查詢SQL語句
下圖是我寫的
這裡寫圖片描述


這樣,我們查詢群組表就寫好了

3.建立群組分表(new) - SQL指令碼
當我們要執行SQL時,可以使用SQL指令碼元件這裡寫圖片描述
選擇 指令碼-> 執行SQL指令碼,雙擊 到 轉換畫板,開啟輸入要執行的SQL語句,如下圖:
這裡寫圖片描述
這裡傳入了game_id作為分表的引數,’tita_group_?’會被替換成’tita_group_gameid值’
記得選擇 “執行每一行”

4.欄位值轉換 - 值對映元件 這裡寫圖片描述
由於群組型別欄位type發生了變化,原來是1,2,新系統是9,10,所以我要進行值得轉換,使用值對映元件
這裡寫圖片描述

5.插入群組資料(new) - 表輸出
需要插入表資料時,使用 表輸出元件
選擇 輸出->表輸出,雙擊,開啟,輸入 ”資料庫連線“,”目標表“,選擇 ”指定資料庫欄位“,輸入 ”資料庫欄位“ 對映,如下圖:
這裡寫圖片描述


”資料庫欄位“ 對映,表字段:插入表字段,流欄位:”上一步“的輸出欄位,這樣執行遷移時,會將資料插入到對應的表字段裡

6.點選執行按鈕這裡寫圖片描述,執行轉換,看到下圖,表示轉換完成
這裡寫圖片描述

7.群組成員,我的群組資料遷移跟上面步驟類似,不再重複說明,最終完成整個轉換如下圖:
這裡寫圖片描述

總之,學習的過程需要不斷實踐和反覆摸索,這只是Kettle一小部分知識,大家保持一顆學習的熱情,就不怕路遠。