1. 程式人生 > >kettle中Switch/Case條件判斷的使用

kettle中Switch/Case條件判斷的使用

今天在做取數過程中遇到了一個問題,就是增量取數,增量取數大部分用到的是根據時間段來抽取資料,然後插入到目標庫,事實中kettle中有個一次提交多少條記錄的問題,今天暫時不討論這個,主要來說說如何根據中間時間表(主要記錄上次取數的開始時間和結束時間),然後去設定取數的時間段。

下面來看一下遇到的問題:

我們是定時取數,本次取數的時間要去中間表檢視上次取數狀態,有二種情況:

(1)上次取數成功:

        則本次取數時間為上次結束時間(end_time)和當前取數時間(now),並且:(a)如果本次取數成功,則更新中間時間表的開始時間和結束時間為本次取數的開始時間和結束時間(好像有點繞哦)並且設定狀態為1,(b)如果本次取數失敗則更新中間時間表的開始時間和結束時間為本次取數的開始時間和結束時間(好像有點繞哦)並且設定狀態為0;

(2)上次取數失敗:

        則本次取數時間為上次開始時間(start_time)和當前取數時間(now),並且:(a)如果本次取數成功,則更新中間時間表開始時間和結束時間分別為本次取數的開始時間和結束時間並且狀態為1(成功),(b)如果本次取數失敗,則不更新中間時間表,只更新操作時間;

1、首先寫一個轉換設定本次取數的時間段引數設定

取數時候的開始時間和結束時間則取決於中間時間表,如果狀態為1則取數時間段為:上次結束時間到當前取數時間;如果狀態為0則取數時間段位:上次開始時間到當前取數時間;這裡在kettle的轉換為:

2、刪除本次取數時間段的資料,並且執行查詢和插入操作

這個步驟相對簡單,有二個轉換,一個轉換為執行SQL指令碼,另一個轉換為查詢插入:

 

3、取數插入操作厚成功或者失敗更新中間表

其中本次取數成功或者失敗轉換裡的內容都是一個SQL指令碼(二個轉換裡的SQL語句基本一樣一個設定1另一個0):

總的作業圖為:

總結:

在這種情況遇到的主要問題就是:根據某個條件有二種或者跟多情況去做,大部分情況會用到switch/case這個元件,然後就是很多時候單單轉換是完成不了一個複雜任務的,需要作業才能關聯起來。