etl ---> kettle

1,Kettle跨平臺使用。
例如:在AIX下(AIX是IBM商用UNIX操作系統,此處在LINUX/UNIX同樣適用),運行Kettle的相關步驟如下:
1)進入到Kettle部署的路徑
2)執行 chmod *.sh,將所有shell文件添加可執行權限
3)在Kettle路徑下,如果要執行transformation,就運行./pan.sh -file=?.ktr -debug=debug -log=log.log
其中。-file說明你要運行的transformation文件所在的路徑;-debug說明日誌輸出的級別;-log說明日誌輸出的路徑
4)同理,對於job的執行,請將./pan.sh更換成./kitchen.sh,其他部分說明不變。

2,Kettle環境變量使用。
在transformation中,Core Objects-->Job-->Set Variables,可以設置環境變量,對於絕對路徑和相對路徑的轉換很有幫助,Kettle的跨平臺很大程度依靠它

3,其它功能的使用。
其它功能包括DB存儲過程調用,流查詢,值映射,聚合記錄等,各位自行摸索

4,Kettle定時功能。
在Job下的start模塊,有一個定時功能,可以每日,每週等方式進行定時,對於週期性的ETL,很有幫助。

a.使用資源庫(repository)登錄時,默認的用戶名和密碼是admin/admin。

b.當job是存放在資源庫(一般資源庫都使用數據庫)中時,使用Kitchen.bat執行job時,需使用如下的命令行:
Kitchen.bat /rep kettle /user admin /pass admin /job job名

c.當job沒有存放在資源庫而存放在文件系統時,使用Kitchen.bat執行job時,需使用如下的命令行:
Kitchen.bat /norep /file user-transfer-job.kjb

d.可以使用命令行執行job後,就可以使用windows或linux的任務調度來定時執行任務了

e.如果出現異常語句,

Unexpected error during transformation metadata load
No repository defined!

請按上面的操作排除。



5,Kettle經驗之日誌。
Kettle對於日誌的處理,存在一個BUG,看過上一篇的人或許已經看到了我的留言,Kettle對於日誌處理有一個BUG,當日志多於49M(不是50M,也不是49M),Kettle就會自動停止,這一點我在源碼裏面也沒有找到對應的設置和約束,原因還找不到,因爲是日誌沒有寫,所以原因也不好跟蹤還不知道具體原因。

6,Kettle之效率提升。
Kettle作爲一款ETL工具,肯定無法避免遇到效率問題,當很大的數據源輸入的時候,就會遇到效率的問題。對此有幾個解決辦法:
1)數據庫端創建索引。對需要進行查詢的數據庫端字段,創建索引,可以在很大程度上提升查詢的效率,最多的時候,我不創建索引,一秒鐘平均查詢4條記錄,創建索引之後,一秒鐘查詢1300條記錄。
2)數據庫查詢和流查詢注意使用環境。因爲數據庫查詢爲數據輸入端輸入一條記錄,就對目標表進行一次查詢,而流查詢則是將目標表讀取到內存中,數據輸入端輸入數據時,對內從進行查詢,所以,當輸入端爲大數據量,而被查詢表數據量較小(幾百條記錄),則可以使用流查詢,畢竟將目標表讀到內存中,查詢的速度會有非常大的提升(內存的讀寫速度是硬盤的幾百倍,再加上數據庫自身條件的制約,速度影響會更大)。同理,對於目標表是大數據量,還是建議使用數據庫查詢,不然的話,一下子幾百M的內存被幹進去了,還是很恐怖的。
3)謹慎使用javascript腳本,因爲javascript本身效率就不高,當你使用js的時候,就要考慮你每一條記錄,就要執行一次js所需要的時間了。
4)數據庫commit次數,一條記錄和一百條記錄commit對效率的影響肯定是不一樣的。
5)表輸入的sql語句的寫法。有些人喜歡在表輸入的時候,將所有關聯都寫進去,要麼from N多個表,要麼in來in去,這樣,就要面對我在2)裏面說道的問題,需要注意。
6)注意日誌輸出,例如選擇數據庫更新方式,而且日誌級別是debug,那麼後臺就會拼命的輸出日誌,會在很大程度上影響速度,此處一定要注意。

7,常見的調試BUG。
Kettle提供了很多調試的解決辦法,但是對於常見的調試BUG還是能避免就避免。
1)路徑問題。我最常遇到的問題就是在windows下調試成功,但是部署到UNIX下出問題,忘記將windows下路徑變成unix下,經常會出現問題。
2)輸出端,數據庫插入更新選擇不對。輸出端,提供了三種數據庫輸出的辦法,數據庫輸出,插入/更新,更新,對於這三種,各有利弊,如果你知道數據庫輸出,完全是插入,如果有重複數據,則會報錯;插入更新和更新,因爲更新數據時,後臺輸出很多日誌,會導致效率很低。

發佈了54 篇原創文章 · 獲贊 6 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章