極速下載站 —— 提供優(yōu)質軟件下載服務,感受全新的極速下載體驗!

最近更新 | 軟件專題 | 軟件分類 | 軟件排行

您的位置:極速下載站資訊首頁軟件教程軟件資訊 → 行分開為多行步驟Kettle6

行分開為多行步驟Kettle6

時間:2019-10-08 14:53:23  作者:無名  瀏覽量:72

本文將對Kettle6中常用步驟行分開為多行(英文原名:Split Field to Rows)。也就是說,將輸入數(shù)據(jù)行集中的某個列按照條件拆分為多行。這種條件可以是簡單的一個分隔符,也可以指定正則表達式。
2.說明
步驟的屬性對話框如下圖所示:
行分開為多行步驟Kettle6
行分開為多行步驟Kettle6圖一
下面通過一個表格逐項解釋每一個對話框中字段的含義。
1
字段名稱 標識本步驟的名稱。
2
要拆分的字段 從輸入數(shù)據(jù)行集中,挑選需要拆分的字段。
3
分隔符 拆分字段時,使用的分隔符。簡單情況下,分隔符劃分的每一個字符串片段,都將成為一個新行。如果4選中,那么這里的分隔符實質是一個正則表達式。
4
分隔符是一個正則表達式 控制3的真實含義。如果選中,3就是正則表達式。否則,不管3中的字符串是何內容,Kettle只是將其當成一個分割文本的字符串。
5
新字段名 分割列后形成的新字段名稱。輸出數(shù)據(jù)行集將包含這個新的列,列的值為分割后形成的字符串片段。
6
輸出中包含行號 輸出數(shù)據(jù)行集中,是否需要包含行號字段。如果需要,那么應輸入這個行號字段的名稱。
7
對接收到的每一行重置行號 輸出數(shù)據(jù)行集中的行號,類似于一個序列,從1開始,每行增加1。如果選中7,那么每一個輸入行集中的每一行,將獨享一個從1開始的序列;否則,所有輸入行集中的行共享一個序列。
舉例來說,假設輸入數(shù)據(jù)行集中有2行,第一行拆分為3行,第二行拆分為2行。如果選中7,那么產(chǎn)生的行號是1 2 3 1 2;如果未選中7,那么產(chǎn)生的行號是1 2 3 4 5。
3.實戰(zhàn)
假設從輸入數(shù)據(jù)行集中拿到如下數(shù)據(jù):
行分開為多行步驟Kettle6
行分開為多行步驟Kettle6圖二
需要把其中所有市、區(qū)、縣的名稱得到,依次按行處理。
可以看出,來源數(shù)據(jù)實際上只有一行,但是想得到的結果是多行,這就需要用到列拆分為多行步驟。步驟的具體設置可以參照文章開始的第一個圖,通過上述步驟,這一行被拆分為以下行:
行分開為多行步驟Kettle6
行分開為多行步驟Kettle6圖三
注意上圖,其中第一行為空。其實這應屬Kettle6的一個bug。如果分割列的正則表達式正好滿足來源行的頭部,那么分割結果中將產(chǎn)生一個空行!
如果要解決這個bug,可以往下閱讀附錄部分。
4.附錄
解決第3部分實戰(zhàn)中第一個行數(shù)據(jù)為空的bug,可以在類:
org.pentaho.di.trans.steps.splitfieldtorows.SplitFieldToRows
的方法splitField中增加以下代碼(117行后):
if(splitStrings.length>1&& StringUtil.isEmpty(splitStrings[0])){
String[] handledStrings = new String[splitStrings.length-1];
System.arraycopy(splitStrings,1,handledStrings,0,handledStrings.length);
splitStrings = handledStrings;
}
這樣可在輸出到目標數(shù)據(jù)行集前將第一個空行處理掉。
以上就是行分開為多行步驟Kettle6

相關資訊