相關概念:
Kettle數據清洗是采用元數據(Meta-data)驅動,以數據流的方式進行的,數據從數據源(數據庫/文件等)在一系列相連的step之間依次向后流動,各個step完成對流經該step的數據進行需要的處理工作。
Kettle中的數據轉換組件按粒度從小到大分為Step、Trans、Job。
Step:是完成單一具體功能的組件,如從文件中讀取數據、對流中的字段進行字符串拆分操作、對不能為空的字段設置相應默認值、將流中的數據寫入到數據表等。
Trans:轉換,一般最終清洗完成的數據庫中有多少個標准表,就要有多少個Trans,通常與表是一一對應的。
Trans由多個Step組成,Step之間使用hop連接,實現數據在Step之間的流動,一系列Step的連接從而完成更復雜的轉換。
Job:作業,由多個Trans組成,表示一次完整的數據清洗任務。
kettle的使用:
新建一個轉換
1新建空白轉換
文件—>新建—>轉換 :新建一個空白的轉換,ctrl+s保存該轉換,命名為標准表的表名;
2添加數據庫連接
在主對象樹中,雙擊DB連接,或右擊DB連接,選擇新建數據庫連接,打開數據庫連接對話框:
其中Oracle數據庫連接中的數據表空間,索引表空間兩項不需要填。其余參數必填,填好之后點測試,檢測是否能正確連接,連接成功后,點確認,便保存了當前連接。
其實,可以隨時在需要的時候建立數據庫連接,而不必剛開始就添加。
3添加需要的step
在核心對象的各個分組中,找到需要的step,雙擊,或者拖拽到右側設計界面,即可添加step到當前轉換中。
簡單示例:新建一個轉換,實現生成10000條測試數據,存放到mysql中的表t1中,t1只有兩個字段,一個是整型,一個是varchar。
step1:新建一個空白轉換,保存,文件名為data_gen.ktr
step2:在核心對象樹中找到“輸入”分組中的“生成記錄”這個Step,並拖放到右邊的工作區中
Step3:在“轉換”分組中,找到“添加序列”,並拖放到工作區中
Step4:在“輸出”分組中,找到“表輸出”Step,並拖放到工作區中
Step5:單擊選中“生成記錄”,然后按住shift+鼠標左鍵,拖至“增加序列”,如此,便在這兩個Step中建立了一個Hop,將這兩個Step鏈接起來,注意hop是有向的。
同樣的方法鏈接“增加序列”和“表輸出”
Step6:雙擊“生成記錄”配置該Step的元數據信息:
如圖中的修改,步驟名稱更改為“生成字符串”;限制改為“10000“,表示生成10000條記錄;字段列表中,如圖填寫,名稱隨意,類型在下拉列表中選擇String,值填寫”aaaa”,其他留空,不要填寫。然后,點擊確定即可。
Step7:雙擊“增加序列”,配置其元數據信息:
如圖填寫:值的名稱即為當前添加字段的名稱,使用計數器來生成序列,會生成從1遞增的序列,可以修改起始值即步長。最大值可以修改為10000,不設置也行,因為它之前的Step結束后,它也跟着結束了。
Step8:雙擊表輸出,配置其元數據信息:
點數據庫連接后面的“新建”按鈕,即為創建一個數據庫連接。
根據自己數據庫的實際情況,設置上述信息,最好點擊下連接測試,防止信息填寫錯誤。
測試通過,后確認即可保存該數據庫連接,此時表輸出設置窗口的數據庫連接自動填上了剛才建立的連接:
點擊目標表后的“瀏覽”按鈕,選擇要存放數據的表:
如上圖,我選擇了t1表存放生成的數據。
提交記錄數量,是每多少條數據提交一次,這里可以默認。
勾選指定數據庫字段,否則下面沒法設置:
然后切換到數據庫字段選項卡,點擊輸入字段映射,會自動獲取流入該Step中數據的各個字段名,以及該表中的字段名。
點擊源字段中的某個字段,然后點擊目標中的某個字段,然后點擊add按鈕,表示兩者之間建立了一個映射,該源字段的值都存在對應的目標字段中。當源字段與目標字段的名字有相同字符串時,可以使用猜一猜,自動匹配,不過不保證准確性。
匹配完成,點擊確定。
如上,這個轉換就建立完成了,注意Ctrl+S保存。
Step9:運行該轉換,查看結果:
點擊:三角形按鈕,表示執行
在彈出的窗口中,點“啟動”即可。
成功執行后,出現如下信息:若失敗,會出現紅色的“×”,並且會在下面日志中記錄錯誤的Step及錯誤信息。
查看t1表中有無數據:
如上,便成功生成了10000條測試數據。