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

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

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

行分開為多行步驟Kettle6

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

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

相關(guān)資訊

軟件資訊排行
最新軟件資訊
軟件教程分類

更多常用電腦軟件

更多同類軟件專題