1. 程式人生 > >檢查處理kettle資料流中的空行

檢查處理kettle資料流中的空行



檢查處理kettle資料流中的空行

ETL處理過程中,有時需要生成資料,但是卻沒有輸入資料,這可能有一些問題,所以通常需要ETL資料流產生一個空行資料;有時處理中需要一些聚集功能,則意味著當沒有輸入資料時,生成值為0;本文說明怎樣檢測並處理空行資料流。

示例場景

假設有需求需要讀取輸入資料代表銷售(有三個欄位:product產品名稱、items_sold銷售量、turnover銷售金額).ETL處理流程需要計算產品的銷售總量及銷售總額;這裡的處理大概是:從輸入檔案中讀取多行資料,然後使用聚集功能,產生期望的結果。

這種方法有缺陷,因為當沒有輸入資料時,不產生任何輸出資料,在這個示例中,可以切換兩個輸入的連線線,測試結果。

第一種解決方案:使用group by步驟

如果使用group by步驟實現聚集,你能設定總返回結果行,即使沒有輸入,啟用“Alwaysgive back a result row”選項。如下圖所示:

第二種解決方案:使用Detect empty stream步驟(檢測空資料流)

如果這個場景更復雜,欄位更多,我們就需要有一般性的解決方案檢測空資料流,我們使用“detect empty stream”步驟。連線輸入源(源有可能為空)到空步驟,從空步驟拷貝資料到兩個分支,其中“detect empty stream”步驟不處理有資料流的行情況,但是沒有任何輸入行資料時,則建立一行資料且所有欄位值為空,該行表示沒有資料。

示例中,可以切換輸入連線失效,則沒有資料行輸入,然後通過javascript步驟手工修改product=none”,item_sold=0,turnover=0.0;如下圖所示,當輸入資料確實為空時,“detect empty stream”步驟產生一空行,然後被更新為期望的輸出。程式碼下載