kettle的job中運行每行




job中運行每行

 有時,我們須要job或轉換執行多次。且每次傳入的參數都不同。假如你正在做數據遷移的工作,須要導入每天的舊數據,則須要一個job依據指定的日期導入數據,該日期被指定作為參數。假設我們須要導入從一個起始日期到昨天全部的舊數據,手工執行job是痛苦的也是錯誤的做法,kettle是能夠首先計算正確的日期然后依據每一個日期執行導入job。
 在主job中,首先運行返回日期轉換(每一個日期作為一行),實際導入數據的job放在轉換的后面運行。而且依據轉換的結果運行每一行,job能夠被設置從一個結果字段中獲取參數。
 

生成日期
 這個轉換負責生成僅僅有一個日期字段的數據行,“set start date ”步驟生成10000行數據流(依據實際情況估算行數,測試時能夠設置小點)。包含一個日期類型常量字段。“calc days”步驟插入一個序列到數據流中,為了在“calc date”步驟能夠計算連續的日期;其后的步驟去除掉其它的輔助字段。然后添加昨天的日期到數據流中。接着是一個比較功能的步驟,推斷每行的中日期是否早於今天。假設進入“discard”步驟,否則進入“copy rows to result”步驟。

 
主job
 主job中運行生成日期轉換之后。是子job,負責運行每一個輸入日期。該job必須要明白設置去運行每一個輸入行,即設置“execute for every input row”復選框選中。同一時候須要傳入一個計算日期。通過“date”參數,所以“copy previous results to parameters?”也須要選中。

最后參數必須從輸入行中映射,參數名和輸入字段都命名為“date”。


 
 

子job
 子job接收每行的“date”日期參數並執行,演示樣例中簡單使用date參數記錄日志然后完畢。
 

下載
 這里下載本演示樣例,主job執行子job,針對從2010-01-01到昨天的全部行。須要指出的是,本演示樣例的技術並不適合全部的場合。特別“循環直到條件為真”(不確定次數)。這時可能用到這篇文章的方法去實現循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM