kettle中訪問前一行資料,kettle一行

來源:互聯網
上載者:User

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輸入的設定中注意一下。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.