Kettle(Pentaho Data Integration) 下载安装使用介绍/功能汇总
目錄
- 0 寫在前面
- 1 產品介紹
- 2 產品安裝
- 2.1 kettle安裝
- 2.2 數據庫以及連接驅動安裝
- 3 功能測試
- 3.1 數據庫連接
- 3.2 兩大功能
- 3.2.1 轉換
- 3.2.2 作業
- 3.3 輸入
- 3.4 輸出
- 3.4.1 表輸出
- 3.4.1.1 字段映射
- 3.4.1.2 增加序列
- 3.4.1.3 替換NULL值
- 3.4.2 更新/插入
- 3.4.3 更新
- 3.4.4 刪除&增加常量
- 3.5 轉換例子
- 3.5.1 排序&去重
- 3.5.1.1 去除重復記錄(并計數)
- 3.5.1.2 排序
- 3.5.2 執行自定義SQL語句
- 3.5.2.1 執行SQL語句
- 3.5.2.2 字段選擇
- 3.5.2.3 設置變量
- 3.5.3 合并數據并同步
- 3.5.3.1 Excel輸入
- 3.5.3.2 合并記錄
- 3.5.3.3 數據同步
- 3.5.4 數據連接&計算
- 3.5.4.1 連接字段
- 3.5.4.2 計算器
- 3.5.5 數據過濾&字符串處理
- 3.5.5.1 過濾記錄
- 3.5.5.2 字符串替換
- 3.5.5.3 字符串操作
- 3.5.5.4 剪切字符串
0 寫在前面
暑假測了kettle寫了總結文檔,現在發到博客,上一篇Plotly.js也是類似的,有需要可以查看我上一篇博客。
1 產品介紹
Kettle(現也被稱為Pentaho Data Integration)是一款開源的ETL工具,純java編寫,可以在Windows、Linux、Unix上運行,數據抽取高效穩定。ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經過萃取(extract)、轉置(transform)、加載(load)至目的端的過程。Kettle中文名稱叫水壺,該產品主要目的是希望把各種數據放到一個壺里,然后以某一種指定的格式流出,它在做一些簡單或復雜的數據抽取、質量檢測、數據清洗、數據轉換、數據過濾等方面有著比較穩定的表現。
2 產品安裝
使用kettle需要安裝:jdk1.8或以上版本,kettle開源庫,數據庫(MySql/Oracle…)。
2.1 kettle安裝
本文基于windows 10環境下載安裝kettle開源庫,該產品依賴jdk,請自行安裝jdk以及相關環境的配置。在安裝kettle過程中發現,kettle的github網址中給出的release和RC版本的庫中在運行時都會出現以下錯誤:
在檢查jdk版本、安裝以及環境配置之后都確定無誤的情況下,通過查找該開源庫中的launcher文件夾,發現缺少launcher.jar文件,因此從其他網址獲取launcher.jar文件放入launcher文件夾后運行,但仍舊報錯,沒有找到解決辦法,故放棄該github-kettle開源庫。
為了測試繼續進行,從網站kettle下載地址下載另一個kettle開源庫‘data-integration’,通過對比該庫和github中的kettle庫發現它們擁有的文件都一致,只是在文件布局上有一些區別(文件夾結構不同,github-kettle庫文件目錄復雜且結構較深,data-integration文件目錄較為簡單,結構較淺),該庫能夠正常運行,因此選用此庫進行測試。
2.2 數據庫以及連接驅動安裝
由于kettle需要和數據庫進行連接,所以需要在本機(或服務器)上安裝數據庫,本文選用MySql,MySql下載安裝請參考Mysql安裝教程,如選用其他數據庫請自行安裝。
要連接MySql數據庫,要先下載MySql的JDBC連接驅動包,可在MySql-connector/J.jar文件下載地址下載,下載解壓后,將該文件夾中的“MySql-connector-java-8.0.26.jar”文件復制到kettle安裝目錄下的“data-integration\lib”文件夾即可。
3 功能測試
3.1 數據庫連接
由于使用kettle的第一步就是連接數據庫,所以首先我們需要在MySql中開啟數據庫服務并登陸,然后創建一個數據庫testdb,根據這個創建的數據庫來與kettle連接:
點擊kettle安裝目錄下的spoon.bat文件,界面如下:
選擇首界面左側的‘轉換’>‘轉換1’>‘DB連接’,選擇MySql連接類型以及JDBC連接方式,然后根據我們在MySql中設置的相關信息填寫如下:
然后可以點擊測試查看是否連接成功,成功會彈出如下對話框:
在kettle中可以同時連接多個數據庫服務,每個服務對應一個端口號,當一個數據庫服務被連接,那么它包含的所有數據庫中的表都被連接,(并不是數據庫服務中的一個數據庫被連接),因此該服務下的所有數據庫表都能被看到(連接時數據庫名稱只要填的是端口對應的服務下創建的數據庫名稱即可)。一般在操作編輯時,模式一欄就是該服務下數據庫名稱,表就是確定的一個表名(3.3.1.1節會提到)。
3.2 兩大功能
從整體上來說,kettle有兩大基本功能:轉換和作業。可以通過最上方一欄的按鈕新建一個轉換或作業,每個轉換或作業都會有一個自己獨立的視圖窗口以及主對象數和核心對象。
3.2.1 轉換
首先以表輸入/輸出這一轉換過程為例簡單介紹spoon支持的轉換功能,其他類型的輸入輸出類似該過程。每次新建一個轉換都需要建立一次DB連接。
首先在testdb數據庫中創建一張表test_user如下:
如果我們想要將這張表中的部分內容以一定格式輸出,需要在spoon界面中‘核心對象’>‘輸入’將‘表輸入’拉到旁邊的視圖頁面中。
雙擊表輸入圖標,出現數據選擇框,下拉選項選擇我們需要導入的表,然后確定:
可以通過‘獲取SQL查詢語句’首先篩選一部分數據(也可以全選),通過SQL語句篩選出來的數據就是輸入數據。
可以通過預覽查看我們篩選出作為輸入的數據:
從‘核心對象’>‘輸出’將‘Excel輸出’(或其他類型的輸出,本文以Excel輸出為例)拉到視圖中,然后按住Shift鍵,用鼠標從輸入到輸出拉出一條線,這樣一個最基本的轉換就構建了。
雙擊‘Excel輸出’,出現選擇框,四個界面如下:
- 文件:設置相關文件屬性,主要注意選擇生成的文件儲存的地址;
- 內容:可以編輯excel表的名稱等其他選項;
- 格式:可以編輯表內容字體屬性;
- 字段:選擇輸出的字段,可以點擊‘獲取字段’獲取數據庫表中全部屬性,然后根據需要進行刪改行(屬性值)。
點擊確定后,點擊視圖上方工具欄中運行按鈕即可運行這個轉換:
運行結果或錯誤可在視圖下方的‘執行結果’中查看。運行成功后可以點擊生成的file.xls文件查看轉換內容:
3.2.2 作業
如果想要定時運行某個轉換,或者順序執行多個轉換,就需要用到作業功能。
首先新建一個作業,然后從‘核心對象’>‘通用’依次拉取‘Start’,‘轉換’,‘成功’到視圖中,然后建立連接如下:
雙擊Start可以設置定時調度,選擇需要進行轉換的時間(間隔):
雙擊轉換選擇我們在上一節中創建的轉換:
然后就可以點擊上面工具欄的左側的三角運行這個作業,由于作業可以間斷進行,所以可以點擊右邊的正方形停止作業。
3.3 輸入
Kettle中除了連接數據庫表之外還有多種輸入方式,可以滿足多種不同文件格式的輸入。
數據通過輸入之后存入內存,成為流。在本文檔中,我們主要采取表輸入獲取數據。
3.4 輸出
Kettle的輸出方式也有多種,可以將數據以不同格式輸出,也可以直接操作連接的數據庫內的表數據,具體如下:
本節我們將主要介紹表輸出、插入/更新、更新、刪除組件。3.4.1 表輸出
在本小節中,由于表的束縛可能導致表輸出失敗,因此我們還會介紹‘增加序列’,‘替換NULL值’組件來解決此類問題。
表輸出是以追加的方式將表1內容插入到表2中。假設此時某數據庫服務下數據庫testdb中有表test_user如下,同時數據庫testdb2中有空表copy2,表結構與test_user相同,id為主鍵,唯一的差別在最后一個屬性字段:test_user是‘home_address’,類型char(35);copy2是‘address’,類型char(30)。
3.4.1.1 字段映射
此時如果我們要將test_user中的內容復制到copy2中,首先將‘表輸入’和‘表輸出’拉到視圖中并建立連接,表輸入按照3.2.1編輯,表輸出編輯如下:
如果要輸出到其他數據庫服務下的表,可以通過‘編輯’建立新連接,如果是當前數據庫服務下的表,那么就可以直接點擊目標表旁的‘瀏覽’,選中之后自動填充數據庫名稱和表名稱,數據庫對應目標模式,表對應目標表。
當兩張表有字段不同時,需要自己定義映射關系,否則會因為找不到字段報錯。首先勾選指定數據庫字段,否則默認自動匹配,然后點擊‘輸入字段映射’,根據需求添加字段映射如下,表字段是目標表中的字段,流字段是在表輸入流程中存入內存中的源表數據字段。
最初已經說明源表和目標表的最后一個字段不同,前者是char(35),后者是char(30),當表結構不同的時候,可以點擊‘表輸出’>‘SQL’,會自動出現修改表結構的語句,點擊執行即可修改表結構。
視圖如下:
點擊執行之后到數據庫查看可以發現test_user的內容已經插入到copy2中:
3.4.1.2 增加序列
當想再次運行上一節中的轉換時,會提示主鍵重復錯誤并終止轉換,因此如果恰好主鍵是自增的且有多次運行的需求,可以通過添加‘轉換’>‘增加序列’結點來實現。
在該節點中會創建一個自增字段到流中,如下圖編輯將該字段命名為‘valuename’,然后根據需要設置起始值和增長根據:
在表輸出的數據庫字段下,只要將新表id替換成剛剛定義的valuename即可:
如果需要多次運行這個轉換,只要每次修改valuename的起始值即可,以防主鍵沖突。
3.4.1.3 替換NULL值
如果將copy2的address字段添加not null約束,那么此時進行轉換會報值為空的錯誤,因為test_user中部分home_address值為空,所以此時要對空值進行替換才能正常轉換。
將‘替換’>‘NULL值’拉到視圖中,結合3.3.1.2視圖如下:
設置空值的窗口如下,可以選擇全部替換,也可以選擇按字段或者值類型替換,此處我們選擇按字段替換,將home_address中的控制替換為“待定”:
該轉換運行兩次之后數據庫結果:
可以看到表輸出是以追加的方式插入數據。
3.4.2 更新/插入
假如主鍵不是自增的,而是確定獨立的值,此時再使用表輸出作為插入數據就會報重復主鍵錯,且無法使用增加序列解決,此時可以選擇‘輸出’>‘插入/更新’來正確操作。
視圖如下:
需求仍舊是將test_user中的內容放入copy2中,但是此時copy2中有兩行數據,且主鍵是id。
插入/更新編輯界面如下:
‘用來查詢的關鍵字’中設置兩張表進行對比的關鍵字,一般選擇主鍵。以本次測試為例,如果源表中的某一行的id在目標表中已經存在,那么就更新目標表中的這一行數據,具體更新的字段可以通過‘更新字段’選擇。如果源表id在目標表中不存在,那么就直接插入這一行數據。
根據我們在上圖中設置的‘插入/更新’操作,執行之后copy2內容和test_user一致。
對于相同主鍵,如果不想更新值,僅僅只需要插入新的行,那么只要勾選‘不執行任何更新’即可。
3.4.3 更新
單純的數據更新編輯(輸出>更新)和上一節基本類似,故不再贅述。區別是更新操作僅僅更新已有的數據,不插入新數據。
3.4.4 刪除&增加常量
如果我們要刪除copy2中id<3的數據,可以利用‘輸出’>‘刪除’和‘轉換’>‘增加常量’來實現。增加常量是指定義一個常量名和它的值,然后自動存入流中,可在后續流程使用。
視圖中的流程如下:
設置常量的原因是如果僅僅是表輸入和刪除操作,那么在流字段里面無法獲取‘3’,因此要得到‘3’這個常量,就必須自己設置一個放入流中。
增加常量和刪除操作如上截圖,設置一個常量id_num=3,然后在刪除編輯里將流字段選擇為id_num,比較符為‘<’,就可實現我們的需求,結果如下,可以看到id<3的行已經被刪除:
3.5 轉換例子
由于一些組件需要組合才能更好地使用,因此接下來本文不按照kettle的組件順序,而是通過一些例子來介紹kettle支持的相關轉換操作。
3.5.1 排序&去重
3.5.1.1 去除重復記錄(并計數)
如果我們要刪除表中重復數據,可以將‘轉換’>‘去除重復記錄’拉到視圖中并編輯如下:
在這一操作中,可以選擇是否對去重的行進行計數并定義新的字段,在該例中定義為‘cnt’,如果要在輸出中體現這一字段,需要為目標表添加一個計數字段,然后在輸出映射中定義為cnt。下方紅框選擇用來比較的字段,當點擊確認后出現提示如下:
這說明kettle的去重操作僅僅是對挨在一塊的有相同比較字段的行去重,因此為了正確對表進行去重,需要在其前面添加‘轉換’>‘排序’操作。
3.5.1.2 排序
將排序拉入視圖中后,整個流程如下(由于排序記錄和去除重復記錄都是轉化過程,因此要查看結果最后要添加一個表輸出):
排序記錄設置如下,通過‘字段’選擇參與排序的字段,字段按設定順序比較,當流中數據通過排序記錄之后會生成一個臨時文件參與下一個流程。
排序本身就可以進行數據去重,只要將上圖中藍色方框進行勾選,就自動將排序后具有相同字段的行去重。上一節中的去重操作的優勢是可以進行計數。
3.5.2 執行自定義SQL語句
本小節中,我們通過執行SQL腳本轉換來聯合介紹‘執行SQL語句’,‘字段選擇’,‘設置變量’組件。
3.5.2.1 執行SQL語句
Tableau中在數據源界面可以使用‘自定義SQL’來對數據源進行操作,在kettle中也有該組件,位于‘腳本’>‘執行SQL腳本’。
執行SQL腳本的編輯界面如下,通過數據庫連接連接到要執行腳本的數據庫,然后在下方SQL腳本框內寫上對應數據庫的SQL語句,在腳本代碼框下方有:
- 執行每一行(和左下方參數框配合使用)
- 變量替換
- Bind parameters
- Quote String
這四個比較重要的選項,它們都有各自的作用,后面會介紹。
‘執行SQL語句’這一組件可以單獨執行,不需要輸入。但當要勾選上面四個選項的時候,就需要一定的輸入了。下面我們介紹這四個選項的功能,在這一過程中,我們還會用到‘字段選擇’和‘設置變量’組件。
3.5.2.2 字段選擇
位于‘轉換’>‘字段選擇’。這一組件的功能是選擇前面流程的輸出字段集合中的部分。
- 執行每一行:
如果在執行SQL語句的編輯框中選擇‘執行每一行’,那么首先需要表輸入。‘執行每一行’可以接收上一步驟中的批量輸出,比如字段選擇控件中的結果輸出(但這一操作不是必選,可以直接從表輸入獲取),如果有n個結果(n條tuple),則sql會被執行n次。每一次將結果中的一組列對應的值(一行)替換到腳本的條件中。
如下圖,首先我們通過字段選擇組件選擇表輸入(test_user表的全部列,包括id,age,sex,name,home_address)中的id,age,name列,通過這一流程之后流中只剩下id,age,name列(也可以在表輸入直接通過SQL篩選,此處是為了方便介紹字段選擇組件進行的冗余操作),可以根據需要對這些字段重新命名。
在執行SQL語句中,勾選“執行每一行”后,就可以在UPDATE語句中使用?來代替變量名。在參數表中可以選擇從字段選擇中選擇的id,age,name,注意條件的順序必須和傳入的參數字段順序一致,它們是一一對應的關系。如果條件中重復使用了條一個值,則必將該字段復制成額外的一個列,然后傳入。參數字段一共有多少行,SQL腳本就會被執行多少次。
Bind parameters和Quote String這兩個選項和執行每一行一起使用,只有勾選了執行每一行,才能選擇這兩個選項。 - Bind parameters
意為綁定變量,它和Quotes String只能二選一。
不勾選‘Bind parameters’:如果參數中的某一字段為字符類型,那么需要在SQL腳本中問號兩邊加單引號,如果是數值類型則不需要。如上圖,name為字符類型,沒有勾選Bind parameters,腳本中使用“name=’?’”,否則會報錯。
勾選Bind parameters,字段為字符類型時,問號兩端不能加單引號,加了單引號會報無效的列索引的錯誤。 - Quote String
勾選該選項的作用是在替換的變量前后兩端加上單引號(腳本中問號兩邊不用自己寫單引號),并且對于特殊字符進行轉義,比如條件值中有單引號時,kettle會自動在單引號前再加一個單引號(在兩端單引號的基礎上),例如,條件值是’ABC,勾選Quote String之后“name=?”會被替換成“name=’’'ABC”。
3.5.2.3 設置變量
選項‘變量替換’勾選的前提是SQL腳本中存在一個變量。
通過‘作業’>‘獲取變量’來創建變量,在取用的時候使用‘${變量名}’即可。
- 變量替換
打開設置變量組件,設置一個變量sex_value默認值為‘f’:
確定的時候會警告該轉換中設置的變量不能在當前轉換中使用,并提示可以將要使用的變量在作業的第一個轉換中設置好。
因此可以了解,一般在作業的Start結點之后會專門放置一個‘設置變量’的轉換流程,用來定義整個作業中會用到的一些變量。我們按照這一規則定義一個作業如下:
設置變量的轉換內容如下,里面定義了變量sex_value:
執行SQL的轉換為:
在執行SQL腳本中,我們勾選‘變量替換’,然后可以在腳本里面使用定義的變量“sex=‘${sex_value}’’’:
3.5.3 合并數據并同步
本小節介紹如何合并數據(或如何合并兩張表的數據)。數據來源為①表輸入②Excel輸入,合并數據要求兩個數據源字段的格式、類型、順序、名稱都一致。
3.5.3.1 Excel輸入
將‘輸入’>‘Excel輸入’拉入視圖中,按照如下順序操作:
在Excel輸入編輯界面中首先單擊‘文件’,選擇Excel文件對應的表格類型(引擎),如果選擇不當會無法讀取數據。然后通過瀏覽文件目錄選擇Excel數據文件,點擊右邊的‘增加’,下方‘選中的文件’會增加剛剛選擇的文件目錄。‘增加’可支持多個Excel文件輸入,數據以追加的方式存入,但要求表字段統一。
然后點擊‘工作表’,通過‘獲取工作表名稱’>‘選定Sheet1’>‘>’>‘確定’選擇需要從Excel文件中(可能包含多個表)導出的表。
最后點擊字段,點擊‘獲取來自頭部數據的字段’可以自動加載字段,這些字段的類型可能和表輸入不同,需要手動糾正,否則會在運行時報錯。
預覽表輸入和Excel輸入的數據如下:
3.5.3.2 合并記錄
將‘連接’>‘合并記錄’拉入視圖中如下:
該組件能對兩個輸入流中的數據進行合并。合并之后的數據會比原始的數據在結構上多一個標志字(默認為flagfield,通常‘合并記錄’之后都會有‘字段選擇’操作,原因就在此)。標志字段用來標記該條數據的狀態,可取值‘identical’,‘new’,‘deleted’,‘changed’。使用該轉換步驟時要注意,傳入合并記錄的兩個輸入數據流的字段名、位置、類型等必須完全一致,否則會報錯。
編輯界面如下,指定新舊數據源,然后在‘匹配的關鍵字’中輸入關鍵字段(一般是主鍵),這里我們定義舊數據源為表輸入,新數據源為Excel輸入。
然后運行該轉換,可以通過執行結果的‘Preview data’查看合并結果,通過下方的輸出可以看到兩個表的數據被合并,而且最后多了一個‘flagfield’字段,值有‘deleted’、‘identical’,‘new’。
接著,我們加入數據字段,然后運行轉換:
在結果中可以發現有一條數據的flagfield字段與上次運行不同,id=8的flagfield更改為‘changed’。
因此我們可以總結flagfield的取值規則:
- 以關鍵字段為對比依據,當舊數據源中某記錄的關鍵字不存在于新數據源中時,flagfield為deleted;
- 以關鍵字段為對比依據,當新數據源中某記錄的關鍵字不存在于舊數據源中時,flagfield為new;
- 對于某一條記錄,當它的關鍵字段在新舊數據源中都出現時,并且在“數據字段”中指定的字段的值完全相同(如id=7和id=9的記錄,在表輸入和Excel輸入中完全相同)。則標記identical;
- 對于某一條記錄,當它的關鍵字段在新舊數據源中都出現時,但在“數據字段”中指定的字段的值已經發生了變化(如id=8的記錄),則flagfield為changed(只有指定了數據字段,才會出現‘changed’這個值);
- 當某條記錄在新舊數據源中都出現時,無論是否設置數據字段,最后的結果都只保留新數據中的數據,這才是數據源新舊之分的真正含義。
3.5.3.3 數據同步
數據同步操作只能在合并記錄操作之后使用,單獨無法使用,因此可以理解為何合并記錄操作會設置一個標志字段值‘flagfield’,它根據數據的來源及變化情況,對每條記錄進行標記,從而能知曉舊表A與新表B的區別。
數據同步的基本視圖如下:
例如現有舊表A和新表B,通過合并記錄操作執行結果的flagfield字段,我們可以得知表A和表B的區別:如果A表有B表沒有,標記為deleted;如果A表沒有而B表有,標記為new;如果A表和B表都有相應關鍵字且值字段也相等則標記identical;如果A表和B表有相應關鍵字但是值字段不相等則標記changed。由此可以看出這幾個字段在指示我們如果要讓表A的數據和表B的數據變得一致需要對表A進行的操作。
所以如果我們想借助flagfield字段來同步兩張表,只需要將同步的表設置為舊數據源,被同步的表設置為新數據源,將同步操作里的目標表設置為舊數據源,然后就可以通過合并之后所有記錄的標記位來同步兩表。
測試如下,現在我們需要讓數據庫里的表copy_test_user(左)同步于excel里的表(右),他們包含的數據如下:
高級選項卡中的操作字段名就是合并記錄里定義的標志字段名,接下來三個框里只有填‘identical’、‘changed’、‘new’,‘deleted’時才能發揮作用,但一般只使用后三個值,因為完全一致的時候不需要任何操作。下面具體介紹:
當值相等時插入:一般填‘new’。意為將數據流中flagfield的值=‘new’的記錄插入到目標表中。
當值相等時更新:一般填‘changed’。意為將數據流中flagfield的值=‘changed’的記錄更新到目標表中。flagfield=‘changed’時源表和目標表會存在相同的記錄,判斷兩個記錄是否相等,依據‘一般’選項卡中‘用來查詢的關鍵字’中設置的判斷條件。即使更新,也只會對‘一般’選項卡中‘更新字段’指定的字段進行更新。
當值相等時刪除:一般填‘deleted’。意為將數據流中flagfield的值=‘deleted’的記錄在目標表中刪除。
執行查詢:當執行更新和刪除操作時,會比較數據流的每條記錄是否已經在目標表中,如果沒有出現,則拋出異常。
執行結果如下圖,同步轉換之后數據庫表內容(右)已經更新為excel表內容(左)。
3.5.4 數據連接&計算
本小節介紹的轉換是將兩個字段進行連接生成一個字符串新字段,同時通過計算器計算表中用戶的出生年份。流程如下,我們輸入數據庫中的表copy_test_user(上一節轉換后的結果少一條id=9的記錄),然后增加一個常量this_year=2021,接著使用‘concat fields’組件將表中id和name連接起來作為新字段mark的值,通過計算器計算this_year-age的值來確定用戶出生年份birth_year,最后輸出查看結果。
3.5.4.1 連接字段
連接字段編輯如下,在‘Target Field Name’填寫連接后新字段的名稱,本例為‘mark’。‘Separator’填寫字段分隔符,本例選擇‘-’。在下方的‘Fields’中填上要從流中進行連接的字段,本例選擇‘id’和‘name’。
3.5.4.2 計算器
計算器編輯頁面如下,在‘新字段’中填寫計算結果存入的新字段名稱,‘計算’選擇要進行計算類型,根據計算類型填寫字段A/B/C,本例計算出生年份,只需要兩個字段A和B。
計算器中的計算類型有很多種,詳情見附錄。
執行轉換后從excel表中查看結果,可以看到后兩列增加字段mark以及birth_year,前者是連接字段,后者是出生年份:
3.5.5 數據過濾&字符串處理
本小節,我們通過數據過濾以及字符串相關操作來完成以下轉換:去除home_address為空的記錄,然后將下表數據的home_address字段規范化,將它的值轉變為最后一個字母的小寫(如‘Street WW’→‘w’,‘Street Z’→‘z’,‘ Street R ’→‘r’)。完成這個轉換需要用到‘過濾記錄’、‘字符串替換’、‘字符串操作’、‘剪切字符串’組件。
轉換視圖如下:
3.5.5.1 過濾記錄
選擇‘流程’>‘過濾記錄’將組件拉入視圖然后編輯如下:
該組件定義一個過濾條件,然后可以通過條件的布爾值將輸出分兩條流,本例只將條件為真的流流入下一個組件。
條件框定義過濾條件,根據需求我們將條件定義如上圖,過濾掉home_address為空的記錄。根據具體需要也可以具體選擇:
在條件正下方可以選擇空(不取反)或‘NOT’取反,在過濾記錄的第二列框可以選擇函數,當為比較符號(=,<,>…)時候可以填寫第三排的框,第三排的框可以選擇字段或者自己定義的值,二選一;當函數選擇字段類型(IS NULL,IN LIST…)時候,第三排的框不可使用。通過右上角的‘+’可以定義多個條件:
3.5.5.2 字符串替換
過濾之后的數據流流入字符串替換組件,編輯界面如下(位于‘轉換’>‘字符串替換’):
字符串替換指定搜索內容和替換內容,如果輸入流的字段和‘搜索’內容能夠匹配上,那么就會把它替換成‘使用…替換’里的字符串。本例將搜索定為‘WW’,替換定為‘W’。‘輸出流字段’可以將替換后的結果放入一個新的字段里,如果只是想更新原來的字段,不用設置該項。本例為了清楚轉換流程,將替換后的字符放入新的字段‘replace_address’。
3.5.5.3 字符串操作
位于‘轉換’>‘字符串操作’。字符串操作主要用來去除字符串兩端的空格(Trim type,可以選擇left/right/both)、大小寫切換(Lower/Upper)、以及刪除字符串中的一些特殊字符(Remove Special character)。同樣支持生成新的字段。本例將刪除字符兩端的空格,將字符都轉為小寫并生成新字段‘operate_address’。
3.5.5.4 剪切字符串
位于‘轉換’>‘剪切字符串’。要滿足最初的需求,只需要將字符開頭的‘street’去除即可,編輯如下,將最后的結果放入新的字段‘cut_address’。需要注意的是該組件中的起始位置和結束位置定義的是留下來的字符串位置(左閉右開),而不是剪切掉的,因此下方的設置意為將字符串的[6,7)位置對應的字符留下。
執行結果如下,通過新的字段可以看到每次操作的字符結果:
總結
以上是生活随笔為你收集整理的Kettle(Pentaho Data Integration) 下载安装使用介绍/功能汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lammps数据后处理:Python o
- 下一篇: 【Turbo】基于MATLAB的turb