kettle中訪問前一行資料,kettle一行
kettle中訪問前一行資料
在kettle中,當需要訪問資料流前一行資料時,很多人都是用javascript步驟的特性;實際上沒有必要,不是說javascript步驟不好,主要是效能低,同時也增加了複雜度,因為寫代碼讓javascript步驟難以理解,最好是使用kettle標準步驟實現。我們的原則是代碼最小化,過程輕鬆。
(The Analytic Query Step)分析查詢步驟
TheAnalytic Query 步驟可以尋找資料流中的前面行或後面行,並且取值到當前行,很多場合是非常有用的,但是我感覺通常被開發人員忽略。在“statistics”(統計)分類裡有該步驟,下面的章節展示如何使用。
需求情境:計算庫存之和
假設需要計算資料流中某欄位的累計和,如庫存和。未經處理資料是針對每個貨物的交易資訊,導致庫存增加或減少,交易是按照日期排序。需要計算每次交易後當前庫存量的值,並作為一個新欄位儲存,結果如所示:
A、B、C列是輸入,列D是通過轉換步驟計算出來的。
一種解決方案基於“Analytic Query”和“JavaScript modified Value”步驟
該思路是通過簡短的javasript代碼去實現,記錄當前產品的庫存,然後增加交易值,並在新欄位中儲存結果。如果資料流是按照產品和日期排序,需要針對當前產品增加一個庫存計數器,當前產品是新產品(相對前一行),則計數器被置為1,否則為0。通常情況很多人通過javascript代碼訪問前一行,這種方法並不可取,除了javascript步驟外,還有“Analytic Query”步驟。本例中javascript步驟僅僅根據新欄位值判斷是否為新的產品,盡量保持javascript步驟簡潔,可以減少錯誤產生。
這裡是解決方案,點擊下載:
首先讀取資料並按照產品和日期排序,然後前一行產品值增加到“prev_product”欄位中,接下來的步驟是和當前產品進行比較,並把標誌值儲存在“is_new_product”欄位中,後面javascript步驟使用之前的資訊計算就變得非常簡單了。
javascript代碼如下:
varstock;
if(is_new_product ==1){
stock = 0;
}
stock += delta;
為了使結果更直觀,最後兩個步驟是去除輔助欄位並安裝日期和產品排序。我們可以通過右擊每個步驟,通過查看輸出步驟,確認每個步驟的輸出欄位情況。
更簡單的方法:無腳步解決方案
使用“group by”步驟,根據輸入分組計算和,在本情境中,比使用“AnalyticQuery”步驟和javascript步驟更有優勢。
無腳步解決方案代碼下載。
在kettle的圖形介面中可以直接實現資料幫浦與轉換 為何還要先儲存成ktr檔案然後用java程式調用
都可運行,非圖形介面運行可減少圖形介面消耗的資源,且運行方式很多種,例形介面運行、命令列調用運行、程式調用運行、遠程機子運行(叢集運行)等。
在kettle中怎把一個excel的多個sheet頁資料匯入一個表中
增加檔案時可以選擇sheet的,你輸入檔案選擇excel輸入的設定中注意一下。