【ETL工具】-Kettle详细教程
一 Kettle概述
1.1 ETL簡介
ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程),對于企業或行業應用來說,經常會遇到各種數據的處理,轉換,遷移,所以了解并掌握一種ETL工具的使用,必不可少。
市面上常用的ETL工具有很多,比如Sqoop,DataX,Kettle等。
1.2 Kettle簡介
1.2.1 Kettle是什么
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。
Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺里,然后以一種指定的格式流出。
Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
Kettle(現在已經更名為PDI,Pentaho Data Integration-Pentaho數據集成)。
1.2.2 Kettle的兩種設計
1.2.3 Kettle的核心組件
1.2.4 Kettle特點
二 Kettle安裝部署
2.1 Kettle下載
2.1.1 下載地址
官網地址
https://community.hitachivantara.com/docs/DOC-1009855
下載地址
https://sourceforge.net/projects/pentaho/files/Data%20Integration/
2.1.2 Kettle目錄說明
2.1.3 Kettle文件說明
2.2 Kettle安裝部署
2.2.1 概述
在實際企業開發中,都是在本地Windows環境下進行kettle的job和Transformation開發的,可以在本地運行,也可以連接遠程機器運行
2.2.2 安裝
1) 安裝jdk,版本建議1.8及以上
2) 下載kettle壓縮包,因kettle為綠色軟件,解壓縮到任意本地路徑即可
3) 雙擊Spoon.bat,啟動圖形化界面工具,就可以直接使用了
2.3 Kettle界面簡介
2.3.1 首頁
2.3.2 轉換
2.3.3 作業
2.4 Kettle轉換初次體驗
體驗案例:將csv文件用Kettle轉換成excel文件
3)按住鍵盤SHIFT鍵,并且點擊鼠標左鍵將兩個控件鏈接起來,鏈接時選擇“主輸出步驟”
4)雙擊Excel輸出控件,在彈出的設置框里設置文件輸出路徑和文件名稱,然后點擊上面的字段框,依次點擊下面的獲取字段和最小寬度,獲取到輸出字段。
5)點擊左上角的啟動按鈕,在彈出的設置框里點擊啟動,執行該轉換。
6)查看kettle下方執行結果日志以及輸出路徑的Excel文件內容
2.5 Kettle核心概念
2.5.1 可視化編程
Kettle可以被歸類為可視化編程語言(Visula Programming Languages,VPL),因為Kettle可以使用圖形化的方式定義復雜的ETL程序和工作流。
可視化編程一直是Kettle里的核心概念,它可以讓你快速構建復雜的ETL作業和減低維護工作量。它通過隱藏很多技術細節,使IT領域更貼近于商務領域。
Kettle里的代碼就是轉換和作業。
2.5.2 轉換
轉換(transaformation)負責數據的輸入、轉換、校驗和輸出等工作。Kettle 中使用轉換完成數據 ETL 全部工作。轉換由多個步驟 (Step) 組成,如文本文件輸入,過濾輸出行,執行 SQL 腳本等。各個步驟使用跳 (Hop) 來鏈接。 跳定義了一個數據流通道,即數據由一個步驟流 (跳) 向下一個步驟。在 Kettle 中數據的最小單位是數據行(row),數據流中流動其實是緩存的行集 (RowSet) 。
2.5.3 步驟(Step)
步驟(控件)是轉換里的基本的組成部分,剛才的案例中就存在兩個步驟,“CSV文件輸入”和“Excel輸出”。
一個步驟有如下幾個關鍵特性:
①步驟需要有一個名字,這個名字在同一個轉換范圍內唯一。
②每個步驟都會讀、寫數據行(唯一例外是“生成記錄”步驟,該步驟只寫數據)。
③步驟將數據寫到與之相連的一個或多個輸出跳(hop),再傳送到跳的另一端的步驟。
④大多數的步驟都可以有多個輸出跳。一個步驟的數據發送可以被設置為分發和復制,分發是目標步驟輪流接收記錄,復制是所有的記錄被同時發送到所有的目標步驟。
2.5.4 跳(Hop)
跳就是步驟之間帶箭頭的連線,跳定義了步驟之間的數據通路。
跳實際上是兩個步驟之間的被稱之為行集的數據行緩存,行集的大小可以在轉換的設置里定義。當行集滿了,向行集寫數據的步驟將停止寫入,直到行集里又有了空間。當行集空了,從行集讀取數據的步驟停止讀取,直到行集里又有可讀的數據行。
2.5.5 元數據
每個步驟在輸出數據行時都有對字段的描述,這種描述就是數據行的元數據。
通常包含下面一些信息。
①名稱:數據行里的字段名是唯一的。
②數據類型:字段的數據類型。
③格式:數據顯示的方式,如Integer的#、0.00。
④長度:字符串的長度或者BigNumber類型的長度。
⑤精度:BigNumber數據類型的十進制精度。
⑥貨幣符號:¥
⑦小數點符號:十進制數據的小數點格式。不同文化背景下小數點符號是不同的,一般是點(.)或逗號(,)。
⑧分組符號:數值類型數據的分組符號,不同文化背景下數字里的分組符號也是不同的,一般是點(.)或逗號(,)或單引號(’)
2.5.6 數據類型
數據以數據行的形式沿著步驟移動。一個數據行是零到多個字段的集合,字段包含下面幾種數據類型。
①String:字符類型數據
②Number:雙精度浮點數。
③Integer:帶符號長整型(64位)。
④BigNumber:任意精度數據。
⑤Date:帶毫秒精度的日期時間值。
⑥Boolean:取值為true和false的布爾值。
⑦Binary:二進制字段可以包含圖像、聲音、視頻及其他類型的二進制數據。
2.5.7 并行
跳的這種基于行集緩存的規則允許每個步驟都是由一個獨立的線程運行,這樣并發程度最高。這一規則也允許數據以最小消耗內存的數據流的方式來處理。在數據倉庫里,我們經常要處理大量數據,所以這種高并發低消耗的方式也是ETL工具的核心需求。
對于kettle的轉換,不能定義一個執行順序,因為所有步驟都以并發方式執行:當轉換啟動后,所有步驟都同時啟動,從它們的輸入跳中讀取數據,并把處理過的數據寫到輸出跳,直到輸入跳里不再有數據,就中止步驟的運行。當所有的步驟都中止了,整個轉換就中止了。
如果你想要一個任務沿著指定的順序執行,那么就要使用下面的“作業”!
2.5.8 作業
作業?(Job),負責定義一個完成整個工作流的控制,比如將轉換的結果發送郵件給相關人員。因為轉換(transformation)以并行方式執行,所以必須存在一個串行的調度工具來執行轉換,這就是 Kettle中的作業。
三 Kettle轉換
3.1 Kettle輸入控件
輸入是轉換里面的第一個分類,輸入控件也是轉換中的第一大控件,用來抽取數據或者生成數據。輸入是ETL里面的E(Extract),主要做數據提取的工作。
由于Kettle中自帶的輸入控件比較多,本次只挑出開發中經常使用的幾個輸入控件來進行講解。
3.1.1 CSV文件輸入
CSV文件是一個用逗號分隔的固定格式的文本文件,這種文件后綴名為.csv,可以用Excel或者文本編輯器打開。在企業里面一般最常見的ETL需求就是將csv文件轉換為excel文件,如果用Kettle來做這個ETL工作,就需要用到CSV文件輸入控件。
任務:將CSV文件轉換成Excel文件。
3.1.2 文本文件輸入
提取服務器上的日志信息是公司里ETL開發很常見的操作,日志信息基本上都是文本類型,因此文本文件輸入控件是kettle中常用的一個輸入控件。使用文本文件輸入控件步驟:
任務:將txt日志文件轉換為Excel文件
3.1.3 Excel輸入
Excel輸入控件也是很常用的輸入控件,一般企業里會用此控件對大量的Excel文件進行ETL操作。使用Excel輸入控件步驟如下:
本章節任務:將excel文件的兩個sheet表格的數據重新寫到一個新的excel文件中
3.1.4 表輸入
1)創建數據庫連接
表輸入可以說是kettle中用到最多的一種輸入控件,因為企業中大部分的數據都會存在數據庫中。kettle可以連接市面上常見的各種數據庫,比如Oracle,Mysql,SqlServer,DB2等。但是在連接各個數據庫之前,我們需要先配置好對應的數據庫驅動,本次以mysql為例,給大家演示kettle連接mysql數據庫的過程。
首先我們要將對應版本的mysql連接驅動放到kettle安裝目錄下面的lib文件夾下,然后重啟kettle的客戶端Spoon
重啟Spoon客戶端以后,我們就可以創建對應的數據庫連接了,在轉換視圖的主對象樹目錄下,有個DB連接,右鍵然后選擇新建,在打開數據庫連接框里,填寫正確的數據庫信息,然后測試,測試無誤后,可以保存此數據庫連接。
數據庫連接默認只對本轉換有效,換一個轉換以后,這個連接就沒法用了,還需要新建數據庫連接,所以我們需要將建好的這個數據庫連接進行共享下,共享以后,其他的轉換也能用我們提前建好的這個數據庫連接了。
2)表輸入
創建好數據庫連接以后,我們就可以使用表輸入控件了,雙擊表輸入控件,選擇剛剛創建的數據庫連接,然后在SQL框里輸入合適的查詢語句,然后點擊預覽按鈕,看能否預覽到我們期望的數據。
任務:創建數據庫連接,然后使用表輸入控件將student表的數據寫到excel中。
3.2 Kettle輸出控件
輸出是轉換里面的第二個分類,輸出控件也是轉換中的第二大控件,用來存儲數據。輸出是ETL里面的L(Load),主要做數據加載的工作。
由于Kettle中自帶的輸出控件比較多,本次只挑出開發中經常使用的幾個輸出控件來進行講解,詳情如下圖。
3.2.1 Excel輸出
Kettle中自帶了兩個Excel輸出,一個Excel輸出,另一個是Microsoft Excel輸出。
Excel輸出只能輸出xls文件(適合Excel2003),Microsoft Excel輸出可以輸出xls和xlsx文件(適合Excel2007及以后)
Excel輸出大家已經很熟悉了,不再贅述了,接下來給大家講下Microsoft Excel輸出。
任務:使用表輸入控件,將student表的數據,以復制的方式輸出到xls和xlsx文件中
3.2.2 文本文件輸出
文本文件輸出控件,顧名思義,這是一個能將數據輸出成文本的控件,比較簡單,在企業里面也比較常用。
任務:將student表的數據復制兩份,導出成txt和csv文件
3.2.3 SQL文件輸出
SQL文件輸出一般跟表輸入做連接,然后將數據庫表的表結構和數據以sql文件的形式導出,然后做數據庫備份的這么一個工作。
任務:將student表的表結構和數據利用kettle導出成sql文件備份
3.2.4 表輸出
表輸出控件可以將kettle數據行中的數據直接寫入到數據庫中的表中,企業里做ETL工作會經常用到此控件。
任務:將student表的數據導入到student2表中,要求利用kettle現場創建student2表
3.2.5 更新&插入/更新(缺點:掃全表)
更新和插入/更新,這兩個控件是kettle提供的將數據庫已經存在的記錄與數據流里面的記錄進行對比的控件。企業級ETL經常會用到這兩個控件來進行數據庫更新的操作
兩者區別:
更新是將數據庫表中的數據和數據流中的數據做對比,如果不同就更新,如果數據流中的數據比數據庫表中的數據多,那么就報錯。
插入/更新的功能和更新一樣,只不過優化了數據不存在就插入的功能,因此企業里更多的也是使用插入/更新。
任務:手動修改下student表的數據(修改和新增),然后用修改后的數據和student2來進行對比,分別嘗試更新和插入/更新控件的區別
3.2.6 刪除
刪除控件可以刪除數據庫表中指定條件的數據,企業里一般用此控件做數據庫表數據刪除或者跟另外一個表數據做對比,然后進行去重的操作。
任務:刪除student2表格中student表里面已有的數據(按照student表對student2表數據進行去重)
3.3 Kettle轉換控件
轉換控件是轉換里面的第四個分類,轉換控件也是轉換中的第三大控件,用來轉換數據。轉換是ETL里面的T(Transform),主要做數據轉換,數據清洗的工作。ETL整個過程中,Transform的工作量最大,耗費的時間也比較久,大概可以占到整個ETL的三分之二。
由于Kettle中自帶的轉換控件比較多,本次只挑出開發中經常使用的幾個轉換控件來進行講解,詳情如下圖。
3.3.1 Concat fields
轉換控件Concat fields,顧名思義,就是將多個字段連接起來形成一個新的字段。
任務:將staff表的firstname和lastname拼接起來,形成name字段,然后再將數據插入到新表emp中
提示:如果涉及到中文亂碼問題,請參考資料:Mysql中文亂碼問題.docx
3.3.2 值映射
值映射就是把字段的一個值映射成其他的值。在數據質量規范上使用非常多,比如很多系統對應性別sex字段的定義不同。所以我們需要利用此控件,將同一個字段的不同的值,映射轉換成我們需要的值。
任務:將staff表的sex字段,映射成男or女,然后再插入到emp表中
3.3.3 增加常量&增加序列
增加常量就是在本身的數據流里面添加一列數據,該列的數據都是相同的值。
增加序列是給數據流添加一個序列字段,可以自定義該序列字段的遞增步長。
任務:給表staff的數據加一列固定值slary和一個遞增的number序列,在控制臺預覽下數據即可,不用輸出。
3.3.4 字段選擇
字段選擇是從數據流中選擇字段、改變名稱、修改數據類型。
任務:在上一個轉換之后,添加字段選擇控件,移除掉firstname字段,并且將lastname重命名為name,將slary重命名為money,然后再次預覽數據,查看數據的變化
3.3.5 計算器
計算器是一個函數集合來創建新的字段,還可以設置字段是否移除(臨時字段)。我們可以通過計算器里面的多個計算函數對已有字段進行計算,得出新字段。
任務:在上一任務基礎之上,添加計算器控件對money和number字段進行相乘,得出新字段acount,然后預覽數據。
3.3.6 字符串剪切&替換&操作
轉換控件中有三個關于字符串的控件,分別是剪切字符串,字符串操作,字符串替換
剪切字符串是指定輸入流字段裁剪的位置剪切出新的字段。
字符串替換是指定搜索內容和替換內容,如果輸入流的字段匹配上搜索內容就進行替換生成新字段。
字符串操作是去除字符串兩端的空格和大小寫切換,并生成新的字段。
任務:在上一個任務之后,添加剪切字符串,字符串替換,字符串操作三個控件,利用這三個控件分別對sex字段進行剪切,替換,操作(去空格,轉大小寫)
3.3.7 排序記錄&去除重復記錄
去除重復記錄是去除數據流里面相同的數據行。但是此控件使用之前要求必須先對數據進行排序,對數據排序用的控件是排序記錄,排序記錄控件可以按照指定字段的升序或者降序對數據流進行排序。因此排序記錄+去除重復記錄控件常常配合組隊使用。
任務:利用excel輸入控件讀取input目錄下的06_去除重復記錄.xlsx,然后對里面重復的數據進行按照id排序并去重
3.3.8 唯一行(哈希值)
唯一行(哈希值)就是刪除數據流重復的行。此控件的效果和(排序記錄+去除重復記錄)的效果是一樣的,但是實現的原理不同。排序記錄+去除重復記錄對比的是每兩行之間的數據,而唯一行(哈希值)是給每一行的數據建立哈希值,通過哈希值來比較數據是否重復,因此唯一行(哈希值)去重效率比較高,也更建議大家使用。
任務:利用唯一行(哈希值)控件對06_去除重復記錄.xlsx去重,并且查看最后輸出的數據跟上個任務有何區別
3.3.9 拆分字段
拆分字段是把字段按照分隔符拆分成兩個或多個字段。需要注意的是,字段拆分以后,原字段就會從數據流中消失。
任務:將07_拆分字段.xlsx里面的NBA球星的姓名,拆分成姓跟名。
3.3.10 列拆分為多行(炸列)
列拆分為多行就是把指定字段按指定分隔符進行拆分為多行,然后其他字段直接復制。具體效果如下圖:
任務:對08_列拆分為多行.xlsx的數據按照hobby字段進行拆分為多行,然后將新數據輸出到excel文件中,查看數據。
3.3.11 行扁平化
行扁平化就是把同一組的多行數據合并成為一行,可以理解為列拆分為多行的逆向操作。但是需要注意的是行扁平化控件使用有兩個條件:
任務:將09_行扁平化.xlsx的數據按照hobby字段進行扁平化
3.3.12 列轉行
列轉行,顧名思義多列轉一行,就是如果數據一列有相同的值,按照指定的字段,將其中一列的字段內容變成不同的列,然后把多行數據轉換為一行數據的過程。具體效果如下圖:
注意:列轉行之前數據流必須按照分組字段進行排序,否則數據會錯亂!
任務:將input目錄下的10_列轉行.xlsx的數據進行列轉行,熟悉列轉行控件的使用
3.3.13 行轉列
行轉列,一行轉多列,就是把數據字段的字段名轉換為一列,把數據行變為數據列。我們也可以簡單理解為行轉列控件是列轉行控件的逆向操作。具體如下圖:
任務:將input目錄下的11_行轉列.xlsx用excel控件輸入,然后行轉列,熟悉行轉列控件的使用。
3.4 Kettle應用控件
應用是轉換控件里面的第五個分類,這個分類下是Kettle給我們自帶的一些工具類
3.4.1 替換NULL值
替換NULL值,顧名思義就是將數據里面的null值替換成其他的值,此控件比較簡單,但是在企業里面也會經常用到。
任務:替換excel數據12_替換NULL值.xlsx的bonus列的null值為0
3.4.2 寫日志
寫日志控件主要是調試的時候使用,此控件可以將數據流的每行數據打印到控制臺,方便我們調試整個程序。
任務:在上個任務的基礎之上,添加寫日志控件,在控制臺輸出查看數據。
3.5 Kettle流程控件
流程是轉換里面的第六個分類,流程分類下的控件主要用來控制數據流程和數據流向。
3.5.1 Switch/case
Switch/case控件,最典型的數據分類控件,可以利用某一個字段的數據的不同的值,讓數據流從一路到多路。
任務:將excel:13_Switch-Case.xlsx的數據按照部門字段進行分類,將同一個部門的數據輸出到一個excel中
3.5.2 過濾記錄
和Switch/case做對比的話,過濾記錄相當于if-else,可以自定義輸入一個判斷條件,然后將數據流中的數據一路分為兩路。
任務:將excel:13_Switch-Case.xlsx的數據按照工資字段進行判斷,將工資在20000及以上的數據輸出到一個excel中,將工資小于20000的輸出到另外一個excel中。
3.5.3 空操作
空操作,顧名思義就是什么也不做,此控件一般作為數據流的終點。
任務:修改上面的轉換任務,將工資大于等于20000的數據輸出,小于20000的數據直接丟棄,熟悉空操作控件的使用。
3.5.3 中止
中止是數據流的終點,如果有數據流到此控件處,整個轉換程序將中止,并且在控制臺輸出報錯信息。此控件一般用來校驗數據,或者調試程序。
任務:使用中止控件判斷上個任務中是否有人的工資低于20000,如果發現有人的工資低于20000的話,中止程序,并在控制臺輸出信息。
3.6 Kettle查詢控件
查詢是轉換里面的第九個分類,查詢控件是用來查詢數據源里面的數據,并合并到主數據流中。
3.6.1 數據庫查詢
數據庫查詢就是從數據庫里面查詢出數據,然后跟數據流中的數據進行左連接的一個過程。左連接的意思是數據流中原本的數據全部有,但是數據庫查詢控件查詢出來的數據不一定全部會列出,只能按照輸入的匹配條件來進行關聯。
任務:利用表輸入控件獲取到staff表的數據,然后利用數據庫查詢控件查詢到department表的數據,然后對兩個表按照dept_id字段進行左連接,并預覽數據
3.6.2 流查詢
流查詢控件就是查詢兩條數據流中的數據,然后按照指定的字段做等值匹配。注意:流查詢在查詢前把數據都加載到內存中,并且只能進行等值查詢。
任務:用流查詢控件,將staff和department的數據按照dept_id字段進行關聯起來
3.7 Kettle連接控件
連接是轉換里面的第十個分類,連接分類下的控件一般都是將多個數據集通過關鍵字進行連接起來,形成一個數據集的過程。
3.7.1 合并記錄
合并記錄是用于將兩個不同來源的數據合并,這兩個來源的數據分別為舊數據和新數據,該步驟將舊數據和新數據按照指定的關鍵字匹配、比較、合并。注意舊數據和新數據需要事先按照關鍵字段排序,并且舊數據和新數據要有相同的字段名稱。
合并后的數據將包括舊數據來源和新數據來源里的所有數據,對于變化的數據,使用新數據代替舊數據,同時在結果里用一個標示字段,來指定新舊數據的比較結果。
任務:利用合并記錄控件比較合并記錄-新舊excel的數據,并預覽數據,查看標志字段的內容
3.7.2 記錄集連接
記錄集連接可以對兩個步驟中的數據流進行左連接,右連接,內連接,外連接。此控件功能比較強大,企業做ETL開發會經常用到此控件,但是需要注意在進行記錄集連接之前,需要對記錄集的數據進行排序,并且排序的字段還一定要選兩個表關聯的字段,否則數據錯亂,出現null值。
任務:使用記錄集連接控件對數據庫表satff和department按照部門id分別進行內連接,左連接,右連接,外連接,查看數據的不同
注意:兩個表進行排序記錄的時候,排序的字段一定要選擇部門id,否則數據會不正確
統計是轉換里面的第十三個分類,統計控件可以提供數據的采樣和統計功能。
3.8.1 分組
分組控件的功能類似于GROUP BY,可以按照指定的一個或者幾個字段進行分組,然后其余字段可以按照聚合函數進行合并計算。注意,在進行分組之前,數據最好先進行排序。
任務:給表staff的數據按照部門進行分組,求出各部門人數以及各部門員工的平均年齡。
3.9 Kettle映射控件
映射是轉換里面的第十八個分類,映射可以用來定義子轉換,方便代碼封裝和重用。
3.9.1 映射
映射(子轉換)是用來配置子轉換,對子轉換進行調用的一個步驟。
映射輸入規范是輸入字段,由調用的轉換輸入。
映射輸出規范是向調用的轉換輸出所有列,不做任何處理。
任務:封裝一個子轉換能夠通過dept_id求出dept_name,然后使用另外一個轉換調用此子轉換,求出數據庫staff表id=3的員工的姓名,年齡,部門id,部門姓名,并輸出到控制臺。
3.10 Kettle腳本控件
腳本是轉換的第七個分類,腳本就是直接通過寫程序代碼完成一些復雜的操作。
執行sql腳本控件就是連接到數據庫里面,然后執行自己寫的一些sql語句
任務:利用執行sql腳本控件將student表數據的xxxxx的年齡更新為18。
四 Kettle作業
4.1 作業簡介
大多數ETL項目都需要完成各種各樣的維護工作。例如,如何傳送文件;驗證數據庫表是否存在等等。而這些操作都是按照一定順序完成。因為轉換以并行方式執行,就需要一個可以串行執行的作業來處理這些操作。
一個作業包含一個或者多個作業項,這些作業項以某種順序來執行。作業執行順序由作業項之間的跳(job hop)和每個作業項的執行結果來決定。
作業項是作業的基本構成部分。如同轉換的步驟,作業項也可以使用圖標的方式圖形化展示。但是,作業項和轉換步驟有下面幾點不同:
4.1.2 作業跳
作業的跳是作業項之間的連接線,他定義了作業的執行路徑。作業里每個作業項的不同運行結果決定了做作業的不同執行路徑。作業跳一共分為下面三種情況:
①無條件執行:不論上一個作業項執行成功還是失敗,下一個作業項都會執行。這是一種藍色的連接線,上面有一個鎖的圖標。
②當運行結果為真時執行:當上一個作業項的執行結果為真時,執行下一個作業項。通常在需要無錯誤執行的情況下使用。這是一種綠色的連接線,上面有一個對鉤號的圖標。
③當運行結果為假時執行:當上一個作業項的執行結果為假或者沒有成功執行是,執行下一個作業項。這是一種紅色的連接線,上面有一個紅色的停止圖標。
在圖標上單擊就可以對跳進行設置。
4.2 作業初體驗
作業案例:將3.10.1的轉換嵌入作業中執行,執行成功或者失敗都發送郵件提醒
五 Kettle使用案例
5.1 轉換案例
案例一:把stu1的數據按id同步到stu2,stu2有相同id則更新數據
(1)在mysql中創建兩張表
mysql> create database kettle;
mysql> use kettle;
mysql> create table stu1(id int,name varchar(20),age int);
mysql> create table stu2(id int,name varchar(20));
(2)往兩張表中插入一些數據
mysql> insert into stu1 values(1001,'zhangsan',20),(1002,'lisi',18), (1003,'wangwu',23);
mysql> insert into stu2 values(1001,'wukong');
(3)在kettle中新建轉換
(4)分別在輸入和輸出中拉出表輸入和插入/更新
(5)雙擊表輸入對象,填寫相關配置,測試是否成功
(6)雙擊 更新/插入對象,填寫相關配置
(7)保存轉換,啟動運行,去mysql表查看結果
注意:如果需要連接mysql數據庫,需要先將mysql的連接驅動包復制到kettle的根目錄下的lib目錄中,否則會報錯找不到驅動。
5.2 作業案例
案例二:使用作業執行上述轉換,并且額外在表stu2中添加一條數據,整個作業運行成功的話發郵件提醒
(1)新建一個作業
(2) 按圖示拉取組件
(3)雙擊Start編輯Start
(4)雙擊轉換,選擇案例1保存的文件
(5)雙擊SQL,編輯SQL語句
(6)雙擊發送郵件,編輯發送郵件的設置信息
(7)保存作業并執行,然后去mysql查看結果和郵件信息
六 Kettle資源庫
6.1 數據庫資源庫
數據庫資源庫是將作業和轉換相關的信息存儲在數據庫中,執行的時候直接去數據庫讀取信息,很容易跨平臺使用
1)點擊右上角connect,選擇Other Resporitory
2) 選擇Database Repository
3) 建立新連接
4) 填好之后,點擊finish,會在指定的庫中創建很多表,至此數據庫資源庫創建完成
5) 連接資源庫,默認賬號密碼為admin
6) 將之前做過的轉換導入資源庫
(1)選擇從xml文件導入
(2)隨便選擇一個轉換
(3)點擊保存,選擇存儲位置及文件名
(4)打開資源庫查看保存結果
6.2 文件資源庫
將作業和轉換相關的信息存儲在指定的目錄中,其實和XML的方式一樣,創建方式跟創建數據庫資源庫步驟類似,只是不需要用戶密碼就可以訪問,跨平臺使用比較麻煩
1)選擇connect
2)點擊add后點擊Other Repositories
3)選擇File Repository
4)填寫信息
七 Kettle調優
1、調整JVM大小進行性能優化,修改Kettle根目錄下的Spoon腳本。
參數參考:
-Xmx2048m:設置JVM最大可用內存為2048M。
-Xms1024m:設置JVM促使內存為1024m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。
-Xmn2g:設置年輕代大小為2G。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss128k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
2、 調整提交(Commit)記錄數大小進行優化,Kettle默認Commit數量為:1000,可以根據數據量大小來設置Commitsize:1000~50000
3、盡量使用數據庫連接池;
4、盡量提高批處理的commit size;
5、盡量使用緩存,緩存盡量大一些(主要是文本文件和數據流);
6、Kettle是Java做的,盡量用大一點的內存參數啟動Kettle;
7、可以使用sql來做的一些操作盡量用sql;
Group , merge , stream lookup,split field這些操作都是比較慢的,想辦法避免他們.,能用sql就用sql;
8、插入大量數據的時候盡量把索引刪掉;
9、盡量避免使用update , delete操作,尤其是update,如果可以把update變成先delete, 后insert;
10、能使用truncate table的時候,就不要使用deleteall row這種類似sql合理的分區,如果刪除操作是基于某一個分區的,就不要使用delete row這種方式(不管是deletesql還是delete步驟),直接把分區drop掉,再重新創建;
11、盡量縮小輸入的數據集的大小(增量更新也是為了這個目的);
12、盡量使用數據庫原生的方式裝載文本文件(Oracle的sqlloader, mysql的bulk loader步驟)。
漫話架構之美
大數據領域原創技術號,專注于大數據研究,包括 Hadoop、Flink、Spark、Kafka、Hive、HBase 等,深入大數據技術原理,數據倉庫,數據治理,前沿大數據技術
總結
以上是生活随笔為你收集整理的【ETL工具】-Kettle详细教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交换机芯片笔记1.1
- 下一篇: 上海工程技术大学c语言商店存货管理系统,