Kettle轉換中SQL中的執行順序(使用 阻塞數據直到步驟都完成 ===》控制轉換中的 SQL執行順序)

目錄

1、kettle中轉換和作業的執行順序

2、根據業務需要,通常需要在轉換內順序執行,小技巧如下

3、爲什麼會用到這個組件 

4、案例演示


1、kettle中轉換和作業的執行順序

    1、一個作業內的轉換,是順序執行的。

    2、一個轉換內的步驟是並行執行的。

    3、作業內不支持事務,轉換內支持事務。

2、根據業務需要,通常需要在轉換內順序執行,小技巧如下

    1、執行SQL是優先於所有步驟。

    2、使用“阻塞數據直到步驟都完成”,確保其他數據步驟都完成再進行下一步驟。

3、爲什麼會用到這個組件 

我就想轉換串行的執行,根據時間戳增量的同步,作業一開始我就獲取當前的時間戳,kettle 完成數據之後,再執行時間更新戳操作,不能數據還沒有同步成功就把時間戳更新,萬一同步失敗怎麼辦?因爲作業執行也需要時間,公司傳感器收集的數據會間歇性寫入MySQL,數據幾分鐘刷新一次,不想丟失數據,也不能重複,儘可能保持數據一致性。

kettle轉換中的各個步驟是並列執行的關係,作業中的步驟纔是有先後順序的。這樣就可能會遇到一種情況,我想在轉換的某個步驟完成後才執行它下面的步驟,這時該怎麼辦呢?那麼這時就可以用到【阻塞數據直到完成】組件。

  • 【阻塞數據直到完成】:這個組件允許設置需要阻塞的具體步驟,會將所設置的步驟的所有數據堵住,當這些步驟完成後,纔會將被阻塞步驟的所有數據往下一個步驟推;

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

4、案例演示

看下面的列子,最後的SQL腳本想在前面的步驟執行完後執行,這裏可用阻塞實現。

【注】:此時別忘了勾選{執行每一行}這個選項,邏輯原理是,只有執行每一行,該步驟纔會向上級步驟要數據,因爲上級阻塞了不給數據,這樣阻塞才能起作用。

當【阻塞數據】通過最後一條數據後,也是唯一 一條數據,SQL腳本才執行一次,這正是我們想要的目的。

 

 

此處我的需求用不到這個 阻塞數據,我在一個轉換中放了太多的操作,我們大可不必放在一個轉換中, 而將更新時間戳的步驟放到作業中的最後一步執行,將時間戳獲取-->設置變量 放到另一個轉換中,這樣方便測試,也可以讓kettle程序 看起來簡單明瞭,用不用這個組件還是要看需求。

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