第三章 可視化ETL平台——Kettle
課程目標
能夠理解Kettle的主要用途
能夠搭建Kettle開發環境
能夠掌握Kettle輸入組件的使用
能夠掌握Kettle輸出組件的使用
能夠掌握Kettle轉換組件的使用
1. Kettle介紹
1.1 數據倉庫
數據倉庫是一個很大的數據存儲集合,出於企業的分析性報告和決策支持目的而創建的,對多樣的業務數據進行篩選與整合。它為企業提供一定的BI能力,指導業務流程改進,監視時間成本、質量以及控制。
重點
數據倉庫是專門用來進行數據分析的,它可以是一個MySQL,也可以是Oracle,也可以將來后面大數據會學習到的Hive等。
1.2 ETL
ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經(extrac過抽取t)、轉換(transform)、加載(load)至目的端的過程。ETL是將業務系統的數據經過抽取、清洗、轉換之后加載到數據倉庫的過程,目的是將企業中分散、零亂、標准不統一的數據整合到一起。
1.3 Kettle介紹
對於企業或行業應用來說,經常會遇到各種數據的處理,轉換,遷移,掌握一種etl工具的使用,必不可少,這里要學習的ETL工具是——Kettle,現在已經更名為PDI。
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需
安裝
Kettle中文名稱叫水壺,該項目的主程序員MATT希望把各種數據放到一個壺里,然后以一種指
定的格式流出
Kettle允許管理來自不同數據庫的數據,提供一個圖形化的用戶環境來描述想做什么,無需關心
怎么做
2. windows安裝Kettle
2.1 安裝JDK
要在windows系統中使用Kettle,必須先安裝好JDK。
2.1.1 安裝JDK軟件
截圖 步驟
1.找到資料/安裝包中的jdk軟件安裝包,雙擊打開。
2.點擊 「下一步」按鈕
3.將路徑修改為 c:\opt\jdk1.8.0_241,點擊「確定」按鈕
4.點擊「下一步」,等待進度條完成。
5.在新彈出的窗口中,點擊「更改」按鈕,將JRE的安裝路徑修改為 c:/opt/jre1.8.0_241。
注:碰到以下錯誤可以忽略(是因為機器名中包含了一些JDK不識別的支付)
6.點擊「關閉」完成安裝。
2.1.2 配置環境變量
要讓JDK環境生效,需要配置下系統的環境變量。此處大家先無需關心環境變量的意義,先按照下面的步驟配置好。
截圖 步驟
1.打開我的電腦,右鍵點擊「此電腦」。
2.點擊「高級系統設置」。
3.在彈出窗口中點擊「高級」選項卡中的「環境變量」。
4.點擊「新建...」按鈕添加環境變量。
5.變量名寫入:JAVA_HOME,變量值設置為之前安裝JDK的路徑:c:\opt\jdk1.8.0_241
6.點擊「確定」按鈕保存。
7.將JAVA_HOME添加都Path中
2.2 安裝Kettle
Kettle的安裝非常簡單,只需要下載后解壓即可。但前提需要安裝好JDK。
1.下載Kettle(可以在資料/安裝包/pdi-ce-9.0.0.0-423.zip)
2.解壓Kettle(解壓到非中文目錄)
3.進入解壓后的文件夾data-integration,雙擊Spoon.bat,啟動kettle
注:kettle也可以到可以到https://sourceforge.net/projects/pentaho/files/下載
3. 快速入門
3.1 需求
有一個txt文件,內容如下:
id,name,age,gender,province,city,region,phone,birthday,hobby,register_date
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
267456198006210000,李四,25,1,河南省,鄭州市,鄭東新區,18681109672,1980-6-21,音樂;閱讀;旅游,2017-4-7 9:14
892456199007203000,王五,24,1,湖北省,武漢市,漢陽區,18798009102,1990-7-20,寫代碼;讀代碼;算法,2016-6-8 7:34
492456198712198000,趙六,26,2,陝西省,西安市,蓮湖區,18189189195,1987-12-19,購物;旅游,2016-1-9 19:15
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
我們需要使用Kettle將這個文件中的數據抽取出來,然后裝載到Excel中。
id name age gender province city region phone birthday hobby register_date
392456197008193000 張三 20 0 北京市 昌平區 回龍觀 18589407692 1970-08-19 美食;籃球;足球 2018-08-06 09:44:43
267456198006210000 李四 25 1 河南省 鄭州市 鄭東新區 18681109672 1980-06-21 音樂;閱讀;旅游 2017-04-07 09:14:13
892456199007203000 王五 24 1 湖北省 武漢市 漢陽區 18798009102 1990-07-20 寫代碼;讀代碼;算法 2016-06-08 07:34:23
492456198712198000 趙六 26 2 陝西省 西安市 蓮湖區 18189189195 1987-12-19 購物;旅游 2016-01-09 19:15:53
392456197008193000 張三 20 0 北京市 昌平區 回龍觀 18589407692 1970-08-19 美食;籃球;足球 2018-08-06 09:44:43
392456197008193000 張三 20 0 北京市 昌平區 回龍觀 18589407692 1970-08-19 美食;籃球;足球 2018-08-06 09:44:43
3.2 Kettle的基本開發步驟
1.要使用Kettle來進行數據處理,首先要做的是構建Kettle的數據流圖,也就是用可視化操作像排積木的方式,把要做的事情排列出來。
2.配置數據流圖中的各個組件
3.保存並啟動執行
3.3 構建Kettle數據流圖
效果圖:
開發步驟
1.將左邊的核心對象中的 輸入文件夾下的文本文件輸入 拖拽到中間空白區域。
2.從輸出文件夾中將Excel輸出 組件拖拽到中間空白區域。
3.按住Shift鍵點擊 文本文件輸入組件,移動鼠標到Excel輸出,然后釋放鼠標,這樣就可以將兩個組件連接到一起。
3.3.1 配置文件文本輸入組件
1.雙擊文本文件輸入組件,在彈出窗口中點擊「瀏覽」按鈕。
2.選擇 資料/測試數據 中的 user.txt 文件
3.點擊「增加」按鈕,將文件加入到要抽取的數據中來。注意:不點添加按鈕,將不會抽取數據。
4.點擊「內容」選項卡,將分隔符修改為逗號(注意是英文狀態的逗號),將編碼方式修改為:UTF-8。
5.點擊「字段」選項卡,再點擊「獲取字段」按鈕,可以讀取到txt文件中的所有字段。
6.點擊「預覽記錄」按鈕,查看Kettle是否能夠讀取到 user.txt 中的數據。
7.點擊「確定」按鈕保存。
3.3.2 配置Excel輸出組件
配置好了抽取 user.txt 組件后,接下來要配置將數據裝載到Excel的組件。
1.雙擊 Excel輸出組件,在彈出窗口中點擊「瀏覽」按鈕。
2.點擊「內容」選項卡,設置要將Excel文件輸出到哪兒的路徑,然后點擊確定,再刪除文件后綴xls
3.點擊「字段」選項卡,再點擊「獲取字段」,將age的格式設置為0,表示只輸出不帶小數點的數字。
3.4 保存並啟動執行
1.點擊工具條上方的保存按鈕,或者按快捷鍵Ctrl +S。
2.Kettle會提示讓我們保存該數據流圖(轉換),我們保存到一個指定位置即可,然后點擊「保存」按鈕即可。
3.點擊工具欄上的播放按鈕啟動執行。
4.執行完后,我們可以到指定的位置,發現Excel文件已經生成,可以看到里面的內容。
4. 程序員小姐姐的煩惱
4.1 問題來了
公司來了有個漂亮的程序員小姐姐叫小花,她剛大學畢業,項目經理安排她這樣一項工作:
有這樣一個Excel文件:user.xls,這個文件內容是這樣的。
項目經理想要讓她將這些數據導入到MySQL中來。
小花剛來,急得團團轉,不知所措,機會來了。
4.2 數據抽取的需求
需要從Excel中將這些用戶的數據,使用Kettle抽取到MySQL中。
4.3 准備工作
為了完成本案例,我們需要准備以下幾件工作:
4.3.1 找到小姐姐的Excel文件
在資料/測試數據 文件夾中可以找到user.xlsx文件
4.3.2 在MySQL數據庫中創建數據庫
為了方便將Excel文件中的數據抽取到MySQL中,我們必須要創建一個名字叫kettle_demo的數據庫,后續Excel中的數據會裝載到該數據庫的表中。
1.在DataGrip中右鍵點擊MySQL連接,選擇New/Schema
2.在創建數據庫的對話框中輸入kettle_demo,點擊Execute
3.我們可以看到kettle_demo數據庫名稱就已經創建好了
4.3.3 在kettle中加載MySQL驅動
Kettle要想連接到MySQL,必須要安裝一個MySQL的驅動,就好比我們裝完操作系統要安裝顯卡驅動一樣。加載MySQL驅動只需以下兩步:
1.將資料中的 MySQL jdbc 驅動包mysql-connector-java-5.1.47.jar和mysql-connector-java-8.0.13.jar導入到 data-integration/lib 中
3.重啟Kettle即可
4.4 構建Kettle數據流圖
效果圖:
開發步驟
1.在Kettle中創建一個轉換(兩種方式)
(1)點擊菜單:文件/新建/轉換
(2)點擊按鈕:
(3)快捷鍵:Ctrl + N
2.從左邊的核心對象中,分別拖入「輸入/Excel輸入」、「輸出/表輸出」兩個組件到中間區域
3.然后按住Shift鍵,在 「Excel輸入」組件上點擊鼠標左鍵,拖動到「表輸出」組件上,連接兩個組件,這樣數據流圖就構建好了
4.5 配置Kettle數據流圖中的組件
剛剛已經把數據流圖構建好了,那么Kettle就可以將Excel文件中的數據抽取到MySQL中嗎?
顯然是不行的。Kettle根本不知道要將哪個Excel文件中的數據,抽取到哪個MySQL中。我們需要配置這兩個組件,告訴Kettle從哪個Excel文件中抽取,以及將數據裝載到哪個MySQL中。
4.5.1 配置Excel輸入組件
1.雙擊Excel輸入組件,會彈出一個對話框,我們可以再該對話框中配置該組件
2.* 因為此處要抽取的Excel文件為Excel 2007版本,所以指定表格類型為Excel 2007 XLSX (Apache POI)
3.隨后我們需要找到要抽取的那個Excel文件,點擊「瀏覽」按鈕,找到 「資料/測試數據/user.xlsx」文件
4.再點擊旁邊的「增加」按鈕,切記:一定要點擊增加按鈕哦!否則沒有效果!
5.在彈出菜單中,點擊「Sheet1」工作簿,並點擊 「>」 按鈕移動到右邊。
6.點擊「字段」選項卡,點擊「獲取來自頭部數據的字段...」按鈕,Kettle會從Excel中讀取第一行字段名稱。
7.將 age 字段的格式設置為#,register_date的格式設置為 yyyy-MM-dd HH:mm:ss。
8.點擊「預覽記錄」按鈕查看抽取到的數據。
9.點擊「確定」按鈕保存。
4.5.2 配置MySQL組件
4.5.2.1 創建數據庫連接
要使用Kettle操作MySQL,必須要建立Kettle與MySQL的連接,否則Kettle也不知道操作哪個MySQL庫。
1.雙擊「表輸入」組件,會自動彈出配置窗口,點擊「新建」按鈕
2.配置MySQL連接
(1)輸入連接名稱,此處用mysql_開頭,數據庫名稱kettle_demo為結尾
(2)在連接類型列表中,選擇MySQL
(3)輸入連接方式:
(4)輸入MySQL的連接參數
3.點擊測試按鈕,測試Kettle是否能夠正確連接到MySQL
4.點擊確認保存,到這里數據庫連接就應該創建好了。
4.5.2.2 使用Kettle在MySQL中自動創建表
要保存數據到MySQL,必須先要創建好表。那么,我們是否需要自己手動在MySQL中創建一個表,用來保存Excel中抽取過來的數據呢?
答案是:不需要。Kettle可以自動為我們在MySQL中創建表。
1.輸入目標表的名稱為:t_user,后續Kettle將在MySQL中創建一張名為 t_user 的表格。
2.點擊下方的「SQL」按鈕,可以看到Kettle會自動幫助我們生成MySQL創建表的SQL語句
將age、gender字段類型設置為INT
將 id 改為 primary key 防止出現重復插入的情況。
3.點擊執行按鈕。Kettle將會讓MySQL執行該SQL腳本。執行完后,可以在DataGrip中刷新在數據庫,可以查看到Kettle幫助我們創建的t_user表。
4.點擊「確定」按鈕,保存配置
4.6 保存並啟動執行Kettle轉換
數據流圖中的組件都已經准備好了,接下來就可以開始執行Kettle轉換了。
1.點擊保存按鈕保存轉換。
2.點擊工具欄上的播放按鈕啟動執行。
3.執行成功后,可以看到以下界面。組件上都顯示了綠色的對號,執行結果中可以看到:轉換完成!日志,說明Kettle的轉換已經執行成功!!
4.7 確認執行結果
Kettle是否已經幫助我們將Excel中的數據抽取並裝載到MySQL呢?我們需要到MySQL中看一看,t_user表中是否有數據呢。
在DataGrip中雙擊 t_user 表格,可以看到Excel中的數據都已經抽取到了MySQL。
到這里,恭喜你,程序員小姐姐小花的問題你已經幫她解決了,晚上讓她請你吃個飯吧。
5. Transformation(轉換)開發
5.1 共享數據庫連接
在后續的Kettle中,我們需要多次用到上面的數據庫連接。那么是不是每一次都要創建數據庫連接呢?這樣就比較麻煩了。在Kettle中,可以將一個數據庫共享,這樣其他的Kettle轉換就都可以復用該數據庫連接了。
1.在轉換中,點擊「主對象樹」,點擊[DB連接]右鍵新建數據庫連接(如果連接已經存在,則無需創建)
2.右鍵單擊需要的數據庫連接,選擇「共享」
3.發現剛剛選擇的數據庫連接已經變成黑體字,說明已經共享成功。
我們興奮地發現,在新建的轉換中,都可以看到該數據庫連接了。這樣就避免了每次我們都需要配置該數據庫連接了。
5.2 表輸入組件
5.2.1 需求
前面我們已經將Excel中數據抽取到了MySQL的t_user表中。
現在有了新需求,要將MySQL數據庫中的 t_user 表中的數據抽取出來,裝載到另外一張表 t_user1中。
5.2.2 構建Kettle數據流圖
1.從 核心對象的輸入組件中,將「表輸入」組件拖拽到中間的空白處。
2.從輸出中將「 表輸出」組件拖拽到中間空白處。
3.安裝Shift鍵,並鼠標左鍵點擊表輸入組件,並拉動鼠標,移動到表輸出組件,松開鼠標。
5.2.3 配置Kettle數據流圖中的組件
接下來,需要指定,數據從哪個數據庫中讀取數據。
5.2.3.1 配置表輸入組件
1.雙擊表輸入組件,在彈出對話框中選擇「獲取SQL查詢語句」。
2.選擇 t_user 表,點擊確定。
3.在彈出對話框中選擇「否」。
4.點擊「預覽」按鈕,查看是否能夠從MySQL讀取數據。
5.可以看到,Kettle中可以查看到 t_user 表中的數據。
5.2.3.2 配置表輸出組件
1.雙擊表輸出組件,在目標表中輸入 t_user1
2.點擊「SQL」按鈕,讓Kettle中自動創建表結構。
3.可以看到,Kettle自動為我們生成了創建表的SQL語句。
4.我們可以到DataGrip中看到 t_user1 已經創建,但表中沒有任何數據。
5.點擊「確定」按鈕保存。
5.2.4 保存並啟動執行
1.點擊保存按鈕保存該轉換。
2.點擊播放按鈕執行,如果看到每個組件上都打上了綠色的對號,說明轉換已經執行成功。
3.再打開DataGrip,刷新下表格,可以看到數據已經加載到 t_user1 中來了。
5.3 插入/更新組件
5.3.1 組件介紹
插入/更新組件能夠將Kettle抽取的數據,與某個表的數據進行對比,如果數據存在就更新,不存在就插入。
5.3.2 需求
修改 t_user中的張三這一行數據,修改age為22
同時,我們想要使用Kettle將 t_user1 中的張三這一行數據的age也修改為22。
5.3.3 測試之前開發的t_user_to_t_user1轉換
我們是否能夠使用 t_user_to_t_user1.ktr轉換來進行數據的同步呢?
直接執行轉換,我們發現,Kettle又將t_user表中的數據新增到了t_user1表中
說明,表輸入組件根本無法同步數據,只是將抽取到的數據,裝載到指定的表中。
5.3.4 恢復數據
為了方便后續的測試,我們需要恢復 t_user1中的數據。
1.清空 t_user1 中的數據
2.點擊OK執行清空
3.點擊刷新按鈕,發現數據已經清空
4.重新運行 t_user_to_t_user1.ktr 轉換
5.並將張三對應的年齡恢復為20
5.3.5 構建Kettle數據流圖
效果圖:
開發步驟
1.拖入一個表輸入組件,用於讀取 t_user 表中的數據。
2.從 輸出中拖入 「插入/更新」組件。
3.將兩個組件連接起來。
5.3.6 配置Kettle數據流圖中的組件
5.3.6.1 配置表輸入組件
1.雙擊表輸入組件,點擊獲取SQL查詢語句,選擇 t_user1 表。
2.點擊 預覽按鈕,查看Kettle是否能夠從MySQL中讀取數據。
5.3.6.2 配置插入/更新組件
1.雙擊 插入/更新 組件,點擊瀏覽按鈕,找到 t_user1 表。
2.添加用來查詢的關鍵字,設置表字段為:id,比較符為:=,流里的字段為:id。
3.點擊「獲取和更新字段」,這樣Kettle將會自動更新、或插入所有的字段。
5.3.7 保存並啟動執行Kettle轉換
1.保存並啟動該Kettle轉換。
2.執行完后,打開DataGrip刷新 t_user1 表格,發現張三的年齡已經更新為22。
注:我們可以往 t_user 中添加一條數據,然后再執行Kettle轉換,再用DataGrip查看 t_user1 表中是否也插入了一條數據。
5.4 刪除組件
刪除組件能夠按照指定條件,將表中的數據刪除。
5.4.1 需求
有以下一個文本文件,文本文件包含了要刪除的兩個用戶id:
id
392456197008193000
267456198006210000
需要使用Kettle將文本文件中兩個ID對應的t_user1表的數據刪除。
5.4.2 構建Kettle數據流圖
效果圖:
1.將文本文件輸入組件拖拽到中間的空白區域。
2.再從 輸出文件夾中輸出一個「刪除」組件。
3.按住Shift鍵,將兩個組件連接到一起。
5.4.3 配置Kettle數據流圖組件
5.4.3.1 配置文本文件輸入組件
1.雙擊文本文件輸入組件,點擊瀏覽,找到 資料/測試數據 中的 要刪除的user_id.txt 文件,再點擊OK按鈕。
2.點擊「增加」按鈕。
3.再點擊「字段」選項卡,點擊「獲取字段」,將文本文件中的字段讀取出來。
4.點擊預覽記錄按鈕,可以查看到Kettle能夠讀取到文本文件中的內容。
5.4.3.2 配置刪除組件
1.雙擊刪除組件,然后點擊瀏覽按鈕,選擇 t_user1 表。
2.在查詢值所需的關鍵字,設置要根據什么條件刪除數據。這里表字段設置為:id,比較符設置為:=,流里的字段1設置為:id。
5.4.4 保存並啟動運行
我們發現,在DataGrip中,指定ID的行已經被刪除了。
5.5 排序記錄組件
5.5.1 組件介紹
排序組件可以將Kettle數據流中的數據進行排序,可以指定升序、還是降序排列。
5.5.2 需求
使用Kettle將t_user表中的用戶數據,按照年齡升序排序,並將排序后的數據裝載到Excel
5.5.3 構建Kettle數據流圖
效果圖:
開發步驟
1.將表輸入組件拖拽到中間空白區域。
2.將轉換文件夾中的「排序記錄」拖拽到中間的空白區域。
3.再將輸出文件夾中的Excel輸出組件拖拽到中間空白區域。
4.按住Shift鍵將組件連接起來。
5.5.4 配置Kettle數據流圖組件
5.5.4.1 配置表輸入組件
1.雙擊表輸入組件,選擇數據庫連接,然后點擊獲取SQL查詢語句。再預覽數據查看是否能夠讀取到 t_user 中的數據。
5.5.4.2 配置排序記錄組件
雙擊 排序記錄 組件,設置字段名稱為 age,升序選擇「是」,這樣該組件將會以 age 字段來進行升序排序。
5.5.4.3 配置Excel輸出組件
1.雙擊Excel輸出組件,點擊瀏覽按鈕,選擇要將Excel文件輸出到哪個位置。
2.點擊「獲取字段」,並將age的格式設置為0。
5.5.5 保存並啟動運行
打開Excel,發現所有數據都是按照年齡升序排序的。
5.6 switch/case組件
5.6.1 機智的體育老師——條件判斷
有一天,體育老師要讓班上的男女同學分別排成兩隊。但這個班上還有幾名同學,很特殊——他們是蜘蛛!!所以,機智的體育老師需要把他們排成三隊,男同學一隊,女同學一隊,蜘蛛一隊。
體育老師要做一件非常重要的事情:判斷學生是男孩還是女孩、或者是蜘蛛,然后讓他們各自到指定的隊伍中。
體育老師做的事情,我們同樣也會在Kettle中會經常用來。在Kettle中,switch/case組件可以來做類似於體育老師要做的事情——判斷。
5.6.2 組件介紹
switch/case提供了一種條件判斷的實現。
5.6.3 需求
從 t_user 表中讀取所有用戶數據,我們需要將性別為男的用戶導出到一個Excel、性別為女的導出到另外一個Excel。
5.6.4 構建Kettle數據流圖
效果圖:
開發步驟
1.將表輸入組件拖拽到中間的空白區域。
2.從流程文件夾中將 Switch/case 組件拖拽到中間的空白區域。
3.再分別拖入兩個Excel輸出組件。
4.將組件按照下圖方式連接起來。
5.6.5 配置Kettle數據流圖組件
5.6.5.1 配置表輸入組件
1.雙擊表輸入組件,指定從 t_user 表中抽取數據。
5.6.5.2 配置switch/case組件
1.此處要指定,按照性別來判斷輸出到Excel文件。需要設置 Switch字段為gender,在Case值列表中將值分別改為男、女。如果gender是男的話,則將數據裝載到 Excel輸出 - 男,如果gender是女的話,將數據裝載到 Excel輸出 - 女。
5.6.5.3 配置Excel輸出組件
1.雙擊Excel輸出組件,分別指定輸出到指定的文件夾中。
5.6.6 啟動執行
Kettle會自動生成兩個Excel文件,一個文件保存了性別為男的所有用戶,另一個文件保存了性別為女的所有用戶。
5.7 SQL腳本組件
接下來,我們來講解一個高級用法。在實際開發中,也經常容易使用得到。假設我們有一段SQL腳本,想要用Kettle來執行,此時該使用哪個組件呢?
5.7.1 組件介紹
執行SQL腳本組件,可以讓Kettle執行一段SQL腳本。我們可以利用它來自動執行某些操作。
5.7.2 需求
使用Kettle執行SQL腳本,將 t_user1 表中的數據清空。
5.7.3 構建Kettle數據流圖
5.7.4 配置Kettle數據流圖組件參數
5.7.5 啟動執行
我們發現,t_user1中的數據已經被完全清除掉了。說明:Kettle已經幫助我們執行了SQL腳本
5.8 設置轉換參數
5.8.1 需求
讓Kettle幫助我們刪除指定省份的用戶,具體刪除哪個省份不確定,由執行Kettle時指定。
首先我們可以使用執行SQL腳本組件來刪除某個省份的用戶,類似下圖:
delete from t_user1 where province = '北京市'
但如果把北京市寫在執行SQL腳本組件中,那么每次刪除的都是北京市的用戶。而此處的需求是,要執行Kettle轉換時,我們需要手動來指定要刪除哪個省份的用戶。此時就需要用到Kettle中的參數了。
5.8.2 參數的使用方法
雙擊Kettle轉換的空白處,會彈出轉換屬性窗口。我們可以在屬性窗口中找到命名參數選項卡,在里面配置Kettle轉換所需要的參數。例如:下圖設置了一個叫做province的參數
5.8.3 在SQL腳本組件中使用Kettle轉換參數
delete from t_user1 where province = '${province}'
通過 ${province} 可以應用Kettle配置的轉換參數,而且一定要勾選上:「變量轉換」
5.8.4 運行帶參數的轉換
在運行轉換時,可以指定參數的值,例如:此處指定要刪除的城市為北京市。
運行完后,我們發現:北京市的用戶已經被刪除了。
再來測試下刪除河南省的用戶:
同樣,我們發現當執行完Kettle轉換后,河南省的用戶也被刪除了。
6. JOB(作業)開發
6.1 程序員小姐姐的第二次邂逅——JOB
前幾天幫助程序員小姐姐小花解決了使用Kettle從Excel中抽取數據到MySQL問題,小姐姐特別高興,請你吃了一頓飯,好一頓魂牽夢繞。小姐姐好幾天都沒有聯系了,今天小姐姐又抱着電腦來找你了。你知道,又有新的問題來了。
項目經理要求小姐姐小花能夠每5秒鍾執行一次Kettle轉換,也就是每5秒鍾將Excel中的數據抽取並裝載到MySQL中。
怎么實現呢?
要實現這個需求,我們需要學習Kettle的JOB,也就是作業。
Kettle中的作業(job)定義了轉換應該如何執行,可以配置轉換來進行定時執行。
6.2 JOB定時任務開發
6.2.1 需求
每5秒鍾執行一次Kettle轉換,也就是每5秒鍾將Excel中的數據抽取並裝載到MySQL中
6.2.2 創建作業
6.2.3 構建作業流組件圖
效果圖:
開發步驟
1.將核心對象中,通用文件夾下的 Start 組件拖拽到中間的空白區域。
2.將 通用文件夾的「轉換」組件拖拽到中間的空白區域。
3.將通用文件夾中的「成功」組件拖拽到中間的空白區域。
4.同樣使用Shift鍵,將組件都連接起來。
6.2.4 配置作業流圖組件
6.2.4.1 配置轉換組件
配置轉換這里選擇作業中要執行的轉換,此處選擇之前開發好的excel_to_mysql.ktr即可
注意:此處要先保存作業,然后再配置轉換。
6.2.4.2 配置Start啟動組件
我們需要在Start組件中,配置定時執行。
6.2.5 啟動運行作業
點擊播放箭頭啟動作業,並觀察數據庫中的數據是否會5秒鍾增加一次。
我們看到數據每隔5秒鍾就會增加一次。
7. Kettle的Linux系統部署
7.1 Linux安裝Kettle
課程提供的Linux系統中已經安裝好了Kettle,可以直接使用,kettle的安裝文檔請參考文檔:06-安裝Kettle.doc
7.2 Pan轉換執行引擎
pan.sh可以用來在服務器中執行一個轉換
pan.sh的命令行參數:
-version:顯示版本信息
-file: 指定要運行的轉換文件(XML文件)
-level: 設置日志級別(Basic,Detailed,Debug,Rowlevel,Error,Nothing)
-log: 指定日志文件
-param:key=value (該參數可以指定多個)
需求:
在Linux中,將 /root/kettle/user.txt數據抽取到 /root/kettle/out_user.xls 表格中
id,name,age,gender,province,city,region,phone,birthday,hobby,register_date
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
267456198006210000,李四,25,1,河南省,鄭州市,鄭東新區,18681109672,1980-6-21,音樂;閱讀;旅游,2017-4-7 9:14
892456199007203000,王五,24,1,湖北省,武漢市,漢陽區,18798009102,1990-7-20,寫代碼;讀代碼;算法,2016-6-8 7:34
492456198712198000,趙六,26,2,陝西省,西安市,蓮湖區,18189189195,1987-12-19,購物;旅游,2016-1-9 19:15
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
392456197008193000,張三,20,0,北京市,昌平區,回龍觀,18589407692,1970-8-19,美食;籃球;足球,2018-8-6 9:44
實現步驟:
1、在 windows 中開發轉換,將 文本文件數據抽取裝載到Excel文件中
2、抽取路徑參數,通過參數指定輸入路徑和輸出路徑
3、將轉換配置保存為transform_param.ktr文件
4、將數據文件user.txt和轉換文件transform_param.ktr都上傳到 /root/kettle目錄
5、使用 pan.sh 執行轉換
cd /root/kettle
pan.sh -file transform_param.ktr -level Basic -param:input=/root/kettle/user.txt -param:output=/root/kettle/output_user
6、結果查看
在/root/kettle目錄會生成輸出文件output_user.xls
從Linux將該文件下載下來查看內容
7.3 Kitchen作業執行引擎
在Linux中對Kettle做Linux配置(和Windows相同,添加驅動jar包)
1、在Windows中開發作業
2、配置Start組件
2、配置轉換組件
修改4.5中Excel存入Mysql的轉換配置如下
將轉換文件保存為2-excel-mysql.ktr中
作業轉換配置如下:
${Internal.Entry.Current.Directory}/2-excel-mysql.ktr
1、配置作業命名參數
2、將作業配置到9-linux-job.kjb文件中,並將該job文件和user.xlsx文件上傳到Linux服務器的/root/kettle/目錄,
7、使用kitchen.sh執行作業
cd /root/kettle
kitchen.sh -file 9-linux-job.kjb -level Basic -param:input=/root/kettle/user.xlsx
打開可查看終端信息,發現每隔5秒鍾執行一次轉換任務
最后查看t_user表,發現每隔幾秒,數據會增多幾行數據
8. 問題1:錯誤連接數據庫[MySQL]
報錯:無法連接到數據庫。
解決辦法:
將MySQL的驅動包復制到 pdi-ce-8.2.0.0-342\data-integration\lib 中,然后重啟kettle