【kettle】獲取數據庫中查詢到或者外部傳入的參數

本人菜雞呀~今天再次記錄幾個kettle的問題!

很早以前,寫過一篇kettle的文章,當時是接手了同事的kettle流程,那時候的我完全就是kettle新人啊(雖然現在我的水平也很菜),因此匆忙的寫下了幾個自己遇見的kettle問題,文章如下:

【記錄】幾個kettle的問題:https://blog.csdn.net/lsr40/article/details/82109119

 

這次,其實也跟上次一樣,還是記錄幾個常見操作

1、數據庫查詢到的數據,傳入到kettle中

業務:跑數據的時候,往往會有一張維表來保存數據跑到哪裏了,通過這張表,我就知道接下來要跑哪裏的數據。

舉個例子:表A是上游表,表B是下游表,上游表的數據到了9月1號,下游表只跑到了8月25號,那麼表B就需要跑8月26號一直到9月1號的數據。

那麼怎麼把這個日期傳入到kettle裏呢?

案例1:獲得表B的最大時間,然後獲取表A中最大時間往後的數據。

看圖吧~

獲取數據的最大時間裏獲得表B的數據最大時間,然後

“獲得需要更新的時間”是一個“表輸入”,裏面獲得了表B中數據的最大時間

 

接着,在設置變量的ktr裏面

然後就可以在任何地方通過${max_date_id}和${month_id}來獲取到這兩個參數了!!

 

2、有時候,我們也需要在shell命令調用kettle任務的時候,傳入相關的參數

案例2:跑數據的日期從外部傳入(shell命令中傳入)

在kettle的入口的命名參數裏寫上外部傳入的參數名稱

接着在後面搞個獲取變量

調用的時候:

$KETTLE_HOME/kitchen.sh -file="/**/**/***數據生成(入口).kjb"  --level=Rowleve -param:job_name="***數據生成(入口)" -param:date_id=20190801 -param:date_type=D 

 

3、如何避免重複開啓相同的kettle任務

其實我們團隊的大佬是用這種方式實現的,先說下實現思路:

每個kettle任務都會給定一個名稱,當一個kettle任務開啓的時候,如果 ps -ef | grep '想查詢的kettle任務的名稱',你會發現服務器會返回8條結果給你,其中有一條是你執行ps -ef 的指令(如果把這條結果通過grep -v 去掉,那就是7條)

因此,我每次運行kettle的時候,先判斷是否是7條,如果是,證明當前任務只開啓了一次,否則就是多次,如果多次,當本次開啓就自動不執行任何結果

實現如圖:

通過javascript代碼,來登錄到執行kettle的服務器上執行查詢命令

然後通過switch/case來判斷接下來執行什麼

嗯,就是這樣子!

 

好,我想說的就這麼說完了,其實因爲界面畫的窗口,對於程序員來說一開始會有點不好接受,不過一旦有現成的流程,要去做一些改變,相對來說還是比較簡單的~

老話,菜雞一隻,最近也是在寫定時同步數據的kettle腳本,所以才跑來總結這篇文章的~

晚上可能要和同事跑去吃自助餐,開心的不行~趕快下班吧!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章