1. 程式人生 > >kettle的【阻塞數據】、【阻塞數據直到完成】、【執行SQL腳本】

kettle的【阻塞數據】、【阻塞數據直到完成】、【執行SQL腳本】

步驟 編輯 變量替換 如果 tex shadow mar 組件 替換

kettle轉換中的各個組件是並行的關系,job中是有先後順序的,這樣就可能會遇到一種情況——我想在某個步驟完成後再執行下面的步驟,這時該怎麽辦呢?那麽這時就可以用到【阻塞數據】和【阻塞數據直到完成】兩個組件;
【阻塞數據】:這個組件只允許前一個步驟的最後一條數據通過,這個往往和【執行SQL腳本】組件 並用;
【阻塞數據直到完成】:這個組件會將所設置的被阻塞步驟的所有數據堵住,當被阻塞的步驟完成後,才會將被阻塞步驟的所有數據往下一個步驟推;

註:雖然阻塞了,但是阻塞之後的步驟仍然在運行,即運行時間仍然在進行;

【執行SQL腳本】:
技術分享圖片
這個組件是一個相對比較復雜的組件,在轉換中這個組件是運行優先級很高的組件,如果不勾選{執行每一行}這個選項,那麽該組件就只會執行一次,勾選了這個選項那麽執行次數就是前一個步驟的數據條目數;如果想實現該組件只在最後一步執行一次,那麽可以這樣來操作

技術分享圖片

【註】:此時別忘了勾選{執行每一行}這個選項,這個流程的邏輯就是當【表輸出】完成後,將其的最後一條數據推過【阻塞數據】,然後執行【執行SQL腳本】,因為勾選了{執行每一行}這個選項,又因為【阻塞數據】只有一條數據,那麽【執行SQL腳本】只執行一次;

另外【執行SQL腳本】還有一些其他的選項,如{變量替換}等;
一、當要使用變量時必須勾選{變量替換}這個選項,如果只勾選這個選項,那麽變量只能使用${變量名}這樣的,且當變量值為字符串時,必須要加單引號,如‘${變量名}’,否則會報錯;
二、如果要使用前面步驟的值,那麽必須要同時勾選{執行每一行},{變量替換},這時使用變量可以用?代替,這樣你才可以編輯下面的參數;

但是還是有幾種情況:1.當勾選了{Bind parmaters}時(也就是綁定變量),這時仍然可以使用${變量名}這種方式但字符串時必須要加單引號,但是?就不管值是否是字符串都不用加單引號,否則報錯;
2.如果不勾選{Bind parmaters},那麽?為字符串是必須加單引號;你可你這樣理解,不勾選{Bind parmaters},把?的值當成數字來處理,此時當?為數字或者sql中的中的字段或者sql語句;而勾選了{Bind parmaters},那麽就把?的值當成一個帶有單引號的字符串;
3.{Quotes String },該選項與“Bind parmaters”選項只能選一個,勾選該選項的作用是,在替換的變量前後兩端加上單引號,並且對於特殊字符進行轉義,比如條件值中,有單引號時,kettle會自動在單引號前再加一個單引號(在兩端單引號的基礎上),如想要在數據庫中輸入‘wang,那麽輸入的時候就要這樣‘‘‘wang‘,第一個和最後一個單引號是標明為字符串,第二個單引號起到的作用是轉義符,第三個才是真正需要的文本單引號;此時變量用?,不要加單引號;

註:?的順序就是你在{參數}選項中編輯的字段的順序;
若想使用${參數名},那麽無論怎麽選擇當其值只能被當做字符串時必須加單引號,值只能是數字和字符串;

kettle的【阻塞數據】、【阻塞數據直到完成】、【執行SQL腳本】