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

來源:互聯網
上載者:User

檢查處理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”步驟產生一空行,然後被更新為期望的輸出。代碼下載。

 

 

 


kettle 處理來自兩個資料流的資料

使用Merge Join,按照你說的“同時在兩個filed裡面的資料被篩選出來”,應該使用內串連【INNER】方式,然後再在後續步驟中將自己需要的欄位輸出。
 
CGI多個提交命令怎辦?

用C語言編寫CGI程式
一、CGI概述
CGI(公用網關介面)規定了Web伺服器調用其他可執行程式(CGI程式)的介面協議標準。Web伺服器通過調用CGI程式實現和Web瀏覽器的互動,也就是CGI程式接受Web瀏覽器發送給Web伺服器的資訊,進行處理, 將響應結果再回送給Web伺服器及Web瀏覽器。CGI程式一般完成Web網頁中表單(Form)資料的處理、資料庫查詢和實現與傳統應用系統的整合等工作。CGI程式可以用任何程式設計語言編寫,如Shell指令碼語言、Perl、Fortran、Pascal、C語言等。但是用C語言編寫的CGI程式具有執行速度快、安全性高(因為C語言程式是編譯執行且不可被修改)等特點。

CGI介面標準包括標準輸入、環境變數、標準輸出三部分。

1.標準輸入

CGI程式像其他可執行程式一樣,可通過標準輸入(stdin)從Web伺服器得到輸入資訊,如Form中的資料,這就是所謂的向CGI程式傳遞資料的 POST方法。這意味著在作業系統命令列狀態可執行CGI程式,對CGI程式進行調試。POST方法是常用的方法,本文將以此方法為例,分析CGI程式設計的方法、過程和技巧。

2.環境變數

作業系統提供了許多環境變數,它們定義了程式的執行環境,應用程式可以存取它們。Web伺服器和CGI介面又另外設定了自己的一些環境變數,用來向CGI 程式傳遞一些重要的參數。CGI的GET方法還通過 環境變數QUERY-STRING向CGI程式傳遞Form中的資料。

3.標準輸出

CGI程式通過標準輸出(stdout)將輸出資訊傳送給Web伺服器。傳送給Web伺服器的資訊可以用各種格式,通常是以純文字或者HTML文本的形式,這樣我們就可以在命令列狀態調試CGI程式,並且得到它們的輸出。

下面是一個簡單的CGI程式,它將HTML中Form的資訊直接輸出到We b瀏覽器。

引用

#include < stdio.h >
#include < stdib.h >
main()
{
int,i,n;
printf (〃Contenttype:text/plainnn〃);
n=0;
if(getenv(〃CONTENT-LENGTH〃))
n=atoi(getenv(CONTENT-LENGTH〃));
for (i=0;i putchar(getchar());
putchar (′n′);
fflush(stdout);
}

下面對此程式作一下簡要的分析。
prinft (〃Contenttype:text/plainnn〃);
此行通過標準輸出將字串〃Contenttype:text/plainnn〃傳送給Web伺服器。它是一個MIME頭資訊,它告訴Web伺服器隨後的輸出是以純ASCII文本的形式。請注意在這個頭資訊中有兩個新行符,這是因為Web伺服器需要在實際的文本資訊開始之前先看見一個空行。
if (getenv(〃CONTENT-LENGTH〃))
n=atoi (getenv(〃CONTENT-LENGTH〃));
此行首先檢查環境變數CONTENT-LENGTH是否存在。Web伺服器在調用使用POST方法的CGI程式時設定此環境變數,它的文本值表示Web伺服器傳送給CGI程式的輸入中的字元數目,因此我們使用函數atoi(......餘下全文>>
 

相關文章

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.