一、下載與安裝
官網地址 大概700~800M,下載好解壓縮即可。當然,要求JDK環境(似乎有自帶)
二、任務(.kjb)與轉換(.ktr)
Kettle工具的主界面-作業
簡單地說,一個轉換就是一個ETL的過程,而作業則是多個轉換、作業的集合,在作業中可以對轉換或作業進行調度、定時任務等(據說定時不好用,可以通過其他方式,比如linux的crontab命令,不過實際使用中,這個指令也不大好使,有待查看日志探明原因。) 我在實際過程中,寫的流程不是很復雜,當數據抽取需要多步驟時,分成多個轉換,在集合到一個作業里順序擺放,然后執行即可,不放到作業里的話,要對多個轉換依次執行命令,比較麻煩。
三、煎鍋、勺子、廚房
是不是莫名其妙,以為走錯了片場?然而這是幾個重要的工具名稱。
1)勺子-Spoon.bat/spoon.sh
圖形界面工具,就是啟動上圖主界面的命令行。這個界面應該是JavaFX做的。 這個用來在有圖形界面的系統下寫任務(如何通過命令行寫我不知道,並且我懷疑沒有這個可能……),如Windows,寫好后,也可以通過該工具進行執行,調試。這個工具最大的問題是啟動很慢,並且如果修改了數據庫連接的配置,只有重新啟動才能生效了。這時候就體現了命令行的優越性。
轉換窗口
左邊有很多控件可供選擇,上圖展示了我在使用中經常用到的幾個控件。
- 執行SQL腳本:可以直接在控件里寫SQL,並指定執行的庫。
表輸入:通過查詢數據庫的表來獲取輸入數據流。該控件中也可以寫SQL
表輸出:將數據流映射到指定的表中。
在這里,指定了數據庫連接(后敘)和目標表之后,可以勾選指定數據庫字段,如此下方的數據庫字段標簽的內容就成了可編輯狀態(因為表輸入和表輸出的數據表結構不可能完全一致,通過這樣可以將A表列對應到指定的B表列中)
- 發送郵件:轉換完成后,通過指定的郵箱發送郵件到指定的聯系人。
2)廚房(Kitchen.bat/kitchen.sh)與煎鍋(Pan.bat/pan.sh)
這兩個指令都可以套用在下面這個命令上
./kichen.sh -file ./YourScirpts/demo.kjb
./pan.sh -file ./YourScripts/demo.ktr
select * from testTable where date=${datetime}
並勾選控件下方的“替換SQL語句里的變量”,保存,雙擊轉換界面空白處,打開轉換屬性設置窗口:
在命名參數標簽下填入命名參數名稱,使用如下命令:
./pan.sh -file YourScripts/test.ktr -param:datetime="'2015-01-01'"
實際應用中,通過python計算日期,再調用shell,即可以實現根據指定日期循環執行腳本了。
import datetime import os date1=datetime.datetime(2016,11,7) date2=datetime.datetime(2016,11,4) #5號執行的任務應該處理4號的 while date1 > date2: temp = date1- datetime.timedelta(days=1) print "處理日期:>>>"+temp.strftime("%Y-%m-%d")+"~"+date1.stftime("%Y-%m-%d") os.system("/usr/local/data-integration/pan.sh -file /usr/local/data-integration/Demo/test.ktr -param:date1=\"'"+temp.strftime("%Y-%m-%d")+"'\" -param:date2=\"'"+date1.strftime("%Y-%m-%d")+"'\"") date1 = temp print ">>>處理完成<<<"
四、設置數據庫
在實際使用中,用到了兩種方式,一個是直接配置在轉換中,一個是配置在jndi配置文件里。 先說第一種:



看到這個突然想起來有件重要的事情沒有說,相關的數據庫連接驅動,要放在data-integration目錄下的lib文件夾內,否則測試連接報錯。 我這三個配置分別對應了只讀庫,中間庫,報表庫,具體配置不做贅述。如此在數據庫連接中,選擇JNDI,填入正確的JNDI名稱(如TBIN)即可使用。 這種方式的好處是在轉換中需要填寫的配置只有個名稱而已,修改起來也只需要改變配置,切換環境十分方便。缺點如前所言,如果修改了配置文件,還需要重啟spoon才能生效,然而這個過程頗為緩慢,本人8G的內存,開起來也得等個好幾分鍾。。。Java寫桌面應用,前途依然任重而道遠。好在有命令行的執行方式,可以解決這個問題。
總結
至此,我所會的差不多說完了,其實沒有什么難度,很多內容可以通過控件上的字面描述理解。難在過程的設計以及sql的維護等,設計什么的,我沒有操太多心,根據負責人的要求left join就over了→_→ 在此過程中,學到了不少shell指令,甚至還寫了個python腳本,將我多年前學到的一丟丟python用到了實際中,還是頗感欣慰的。 以上這些應該能滿足基本要求了,實際上還有很多高級內容,比如將作業、轉換維護在數據庫中(配置資源庫),定時任務(雙擊作業視圖下的start控件即可看到),日志輸出(指定輸出的內容,等級),我並沒有深究,感覺做這個已經超綱了,再深入就更沒意思了。(比起那些只要做了就做到完美的人,我真是太……然而偷懶下來的時光,我用來貢獻黑客派了,哈哈~)
作者:O型血橙 鏈接:http://www.jianshu.com/p/4d8171150faf 來源:簡書 著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。