一直用SSIS做ETL,越來越感覺這玩意不是親生的.因此萌生換ETL工具的想法,不過Kettle社區版沒什么調度系統,貌似錯誤處理也不是很方便,且先了解吧. 本文簡略的記錄了整個軟件的使用流程.
開始
Kettle 的幾個子程序的功能和啟動方式
Spoon.bat: 圖形界面方式啟動作業和轉換設計器。
Pan.bat: 命令行方式執行轉換。
Kitchen.bat: 命令行方式執行作業。
Carte.bat: 啟動web服務,用於 Kettle 的遠程運行或集群運行。
Encr.bat: 密碼加密
資源庫
資源庫就是放置Metadata的地方了. 點CTRL -R可以顯示資源庫連接的窗口,沒有的新建一個就行. 看了下論壇,都推薦用文件資源庫 (使用了org.pentaho.di.repository.Repository 接口)
按 CTRL –E可以瀏覽所連接的資源庫中的Metadata
做的作業,轉換,連接 等保存后,直接可以在資源庫中讀取使用.
菜單項
這里可以設置kettle運行時候的一些默認參數
這里也是類似
簡單示例
在Input里面拖個 Dtata Grid,在Output里面拖個 Text file output
Data Grid里面輸入部分數據
在Data Grid組件上懸停,然后點擊紅框按鈕連接Text file output組件
雙擊 Text file output ,然后在Fields 頁面點擊Get Fields.獲取字段,然后在File頁中選擇輸出路徑
運行
在彈出來的對話框中直接點運行.
傳輸方式
再托一個 Table output.連接的時候問你傳輸方式,根據需要選一個即可
也可以右擊組件,選擇傳送方式
查看輸入/輸出的Metadata
右擊Text file output ,選擇 Show input fields 可以查看輸入的Metadata
雙擊Text file output,選擇連接,指定表名,然后復選 Specify database fields , 然后點擊Get fields按鈕
此時我們數據庫中並沒有testa這張表,此時點擊界面上的,SQL生成按鈕,會為我們自動生成建表語句
錯誤輸出
再拖一個文本輸出對象 Text file output 2 .然后連接 Table output , 連接選項,選擇 Error handling of step
隨后右擊Table output 點擊 Define error handing
設定相關字段名,此時改一下數據,如數據類型等,執行后就可以看到效果了.
常用控件
Select values
Add constants
Generate random value
生成隨機數,如果一想要一次生成多行數據,則右擊選擇,Change number of copies to start.(注意這里是生成多份哦.很可怕)
Filter rows
Calculator
計算器.Calculation 里面有很多選項,選中以后指定對應字段即可
Merge Join
表格連接
Join Rows (cartesian product) 笛卡爾輸出
Table input
執行Select 語句,從數據庫中獲取數據.可以通過?或者${var}方式使用變量. 實際演示如下:
0x01 拖一個Get System Info 組件,然后設置一個變量,類型是命令行參數1
0x02 Table input 寫好語句后,勾選 Replace variables in script? ,然后在 Insert data from step 中選插入數據的步驟.(此處選擇前面創建的Get System Info)
注: 其中 Enable lazy conversion 選項是提升性能用的. 如果使用了,獲取數據不做數據轉換.用到的時候再轉 (延遲轉換用 rs.getBytes(int) 某則用 rs.getString(int))
0x03 在之個性步驟指定參數,就可以執行看到效果了.
執行
遠程執行
遠程執行需要執行Carte,他內嵌Jetty的http server .
0x01 執行命令,啟動http server
Carte 192.168.1.10 2333
0x02 在項目中新增子服務器
用戶名密碼都是cluster, 如果要修改可以至C:\data-integration\pwd\kettle.pwd 修改
0x03 執行
選則遠程執行,然后選擇我們剛才建立的服務器即可
群集
通過上面的步驟,我們可以多創建一台服務器.然后組合起來做成群集.其中有一台要設置為Master
0x01 建立群集
0x02 使用群集
右擊組件,然后選擇Clusterings,選擇剛才創建群集,
如果有組件使用了群集,那么執行的時候默認群集這個選項就選中了
命令行執行
參數值格式 /參數名:值 或 -參數名=值 (建議第一種)
0x01 新建一個作業
0x02 通過命令行執行
資源庫名稱 ResConn,作業名稱job ,路徑在根目錄下,其實不寫也可以,日志文件 log.txt,日志級別 basic (日志默認保存在 java.io.tmpdir的臨時目錄中文件名類似spoon_XXX.log)
.\Kitchen.bat /rep:ResConn /job:job /dir:/ /logfile:c:/log.txt /level:basic
另外可以直接把job依賴的文件導出成 zip,然后直接執行zip文件
kitchen /file:c:/job1.kjb /export:c:/a.zip
kitchen.bat /file:”zip:file:///c:/a.zip!job1.kjb”