1. 程式人生 > >Kettle安裝及使用

Kettle安裝及使用

地址 nts 進入 版本 測試 r文件 純java 開始 後綴名

一、Kettle概念

Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。

Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺裏,然後以一種指定的格式流出。

Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什麽,而不是你想怎麽做。

Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。

二、下載和部署

下載kettle壓縮包,因kettle為綠色軟件,解壓縮到任意本地路徑即可.

下載kettle包,並解壓http://community.pentaho.com/projects/data-integration/

技術分享圖片

壓縮包:(這裏使用的是Kettle6.1版本)

技術分享圖片

解壓:

技術分享圖片

三、Kettle環境配置

1、安裝JDK(略)

2、測試JDK安裝成功(略)

JDK安裝步驟見《kettle安裝部署及遠程執行.docx》

強調:kettle6.1版本,必須配套使用JDK1.7及以上版本。

3、運行Kettle

Windows下找到$KETTLE_HOME/spoon.bat,雙擊運行.

技術分享圖片

歡迎界面如下圖所示:

技術分享圖片

技術分享圖片

四、Kettle組件介紹與使用

1 、Kettle使用

Kettle提供了資源庫的方式來整合所有的工作,;

1)創建一個新的transformation,點擊保存到本地路徑,例如保存到D:/etltest下,保存文件名為Trans,kettle默認transformation文件保存後後綴名為ktr;

2)創建一個新的job,點擊保存到本地路徑,例如保存到D:/etltest下,保存文件名為Job,kettle默認job文件保存後後綴名為kjb;

技術分享圖片技術分享圖片

技術分享圖片

技術分享圖片

2 、組件樹介紹

2.1 、Transformation的主對象樹和核心對象分別如下圖:

技術分享圖片技術分享圖片

ransformation中的節點介紹如下:

Main Tree:菜單列出的是一個transformation中基本的屬性,可以通過各個節點來查看。

DB連接:顯示當前transformation中的數據庫連接,每一個transformation的數據庫連接都需要單獨配置。

Steps:一個transformation中應用到的環節列表

Hops:一個transformation中應用到的節點連接列表

核心對象菜單列出的是transformation中可以調用的環節列表,可以通過鼠標拖動的方式對環節進行添加:

Input:輸入環節

Output:輸出環節

Lookup:查詢環節

Transform:轉化環節

Joins:連接環節

Scripting:腳本環節

2.2 、Job的主對象樹和核心對象分別如下圖:

技術分享圖片技術分享圖片

Main Tree菜單列出的是一個Job中基本的屬性,可以通過各個節點來查看。

DB連接:顯示當前Job中的數據庫連接,每一個Job的數據庫連接都需要單獨配置。

Job entries/作業項目:一個Job中引用的環節列表

核心對象菜單列出的是Job中可以調用的環節列表,可以通過鼠標拖動的方式對環節進行添加。

每一個環節可以通過鼠標拖動來將環節添加到主窗口中。

並可通過shift+鼠標拖動,實現環節之間的連接。

2.3 、kettle的簡單使用

DB連接

我們可以看到轉換的主對象樹和核心對象區域,然後我們添加一個DB連接。

選擇“主對象樹”,雙擊“轉換”標簽下的“DB連接”會彈出一個配置窗口。填入連接名稱,選擇連接類型,配置數據庫設置,然後測試下配置是否正確。

由於kettle沒有將所有數據庫的Driver文件集成,所以如果想連接指定的數據庫,需要自己下載JDBC驅動,放入指定的lib目錄下。添加完JDBC驅動後,必須重啟kettle才能正確加載驅動(添加oracle數據庫的jdbc驅動,參見6、常見問題 6.1【Kettle】JDBC連接oracle報找不到驅動)。

技術分享圖片

註:在轉換之前需要創建轉換所需的表,原始表和轉換的目標表。

點擊“核心對象”標簽頁中的“輸入”,選擇“表輸入”拖到“轉換”區域。

雙擊“表輸入”圖標彈出表輸入對話框,填入步驟名稱,選擇數據庫連接,點擊“獲取SQL查詢語句”,或者直接寫入SQL語句,填寫附件信息,點擊“預覽”按鈕查看執行結果,沒有錯誤,點擊“確認”關閉對話框。

技術分享圖片

點擊“核心對象”—“輸出”,選擇“Excel輸出”拖入到轉換區,雙擊Excel輸出圖標,彈出對話框,選擇文件名和其它附加參數,點擊確認

技術分享圖片

點擊輸入表的圖標,同時按下shift鍵,再點擊輸出文件,將兩者連接起來。然後雙擊Excel輸出進行配置。

技術分享圖片

最後一步就是執行kettle腳本,點擊工具欄的播放箭頭即可。

技術分享圖片

點擊“啟動”開始轉換,在轉換過程中會出現轉換的信息,如下圖所示。

技術分享圖片

技術分享圖片

完成轉換後,我們可以在Excel輸出目錄中查看轉換結果。

技術分享圖片

註:時間字段轉換到Excel為空,修改SELECT語句中使用TO_CHAR轉換成字符串,例如:to_char(start_time,’yyyy-mm-dd HH24:MM:SS’) as start_time.

註:Excel(2007之前版本)中的記錄不能超過65535條,否則會自動關閉文件,導致轉換失敗。

至此,一個簡單的數據遷移腳本,從oracle數據庫導出數據到EXCEL文件中就大功告成了。  

3、使用舉例1

3.1、建立轉換

選中列表中的的“表輸入”、“表輸出”、“插入/更新”,拖拽到右側工作區。鼠標選中節點鍵盤按shift鍵,拖拽即可連線。下圖是一個轉換,有兩個動作,一是直接從數據源表同步數據到目標表,一是檢查源表的插入和更新,同步到目標表。

技術分享圖片

黑色線為生效,灰色線為失效,節點和連接可雙擊進行編輯。

技術分享圖片

可預覽數據是否正確。

技術分享圖片

雙擊編輯表輸出動作。

技術分享圖片

要獲取的字段設置如下所示:

技術分享圖片

點擊“Enter field mapping/輸入字段映射”進行字段選擇。

技術分享圖片

選擇要用的字段後點確定,註意字段的約束條件。

編輯好後點擊上面的執行即可。

技術分享圖片

左側參數暫不說明,執行完成後可以觀看下方的日誌。

技術分享圖片

技術分享圖片

雙擊編輯“插入/更新”動作。

技術分享圖片

然後點擊運行。

執行前,在源庫裏加條新紀錄。確定作業執行正常後可以保存作業。

3.2、建立執行的JOB/作業

建立JOB的前提是有可以完整執行的作業,上面步驟定制的作業進行保存

技術分享圖片

技術分享圖片

從左側列表拖拽“START”,“Success”,“轉換”,“發送郵件”到工作區並連接,如下圖。

技術分享圖片

然後雙擊“START”動作進行編輯

技術分享圖片

然後雙擊編輯“Transformation”活動。

轉換文件名選擇上一步編輯好的轉換位置

技術分享圖片

編輯完成後直接點擊運行即可。

技術分享圖片

運行後查看日誌。

技術分享圖片

當任務執行以後可以查看相對應的日誌,也可自行配置日誌。

技術分享圖片

五、常見問題解決

1 、【Kettle】JDBC連接oracle報找不到驅動

初次接觸kettle,環境都配置好以後,啟動kettle的spoon,新建作業,配置jdbc的oracle數據源連接,報找不到驅動。

技術分享圖片

解決辦法:
1)、下載OJDBC14.jar包
2)、 將該包拷貝到kettle的~\data-integration\libswt或者~ \data-integration\lib路徑下都可以。3、重啟kettle,重新配置數據源連接。問題解。

2、 IP地址輸入錯誤

技術分享圖片

3、數據庫實例輸入錯誤

技術分享圖片
錯誤連接數據庫 [GCS] : org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.1.46:1521:ORCL1

org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
192.168.1.46:1521:ORCL1
技術分享圖片

4、用戶名密碼錯誤

技術分享圖片

六、註意事項

1、表輸入中書寫sql若有參數,圖中替換SQL語句裏的變量必須勾上

技術分享圖片

2、若開發步驟中由一個步驟變倆個步驟,需要分清楚,分發與復制。分發數據輪流進入目標步驟,復制是倆個步驟同時進入。

技術分享圖片

3、倆個表輸入步驟做記錄集(表關聯)關聯,必須提前將關聯字段排序,不然會漏掉數據

技術分享圖片

七、kettle組件介紹說明

1、文本文件輸入(text input)讀取大量不同的文本文件。大多是通過工具生成的CSV文件。

2、表輸入(table Input):常用來利用連接和SQL,從數據中讀取信息,自動生成基本的SQL語句。

3、獲取系統信息(get system info):這個步驟從 Kettle 環境中獲取信息。

4、生成行(Generate Rows :這個步驟輸出一定數量的行,缺省為空。可選包括一定數量的靜態字段。

5、Cube輸入(文件反序列化)(De-serialize from file):從二進制 Kettle Cube 文件中讀取數據行。 備註:這個步驟僅僅用來存儲短期數據。不同版本之間不保證文件的格式一樣。

6、XBase輸入: 使用這一步可以讀取大多數被稱為 XBase family派生的 DBF文件。

7、Excel輸入:利用這個步驟可以從 Kettle 支持的系統的 Excel文件裏面讀取數據。

8、XML輸入:這個步驟允許你讀取存儲在 XML 文件中的數據。它也提供一個接口,你可以定義你想讀取的文件名、XML 文件的數據重復部分、獲取的字段等。你可以指定元素或屬性字段。

9、獲取文件名(Get File Names):這個步驟可以獲取系統的文件名信息。

10、表輸出(Table output)這個步驟可以存儲信息到數據庫表中。

11、插入/更新(Insert/Update):這個步驟利用查詢關鍵字在表中搜索行。如果行沒有找到,就插入行。如果能被找 到,並且要被更新的字段沒有任何改變,就什麽也不做。如果有不同,行就會被更新。

12、更新(Update ):這個步驟類似於插入/更新步驟,除了對數據表不作插入操作之外。它僅僅執行更新操作。

13、刪除(Delete)這個步驟類似於上一步,除了不更新操作。所有的行均被刪除。

14、Cube output(序列化到文件)(Serialize to file):這一步驟存儲數據到一個二進制文件。這個步驟有個優勢就是回讀的時候,文本文件的內容不需要解析。這是因為元數據也同時存儲在 CUBE 文件裏面。

15、XML輸出:這個步驟允許你從源中寫入行到一個或者多個 XML 文件。

16、EXCEL輸出:利用這個步驟,在 Kettle 支持的系統中,你可以寫入數據到一個或者多個Excel 文件中。

17、Access 輸出(Microsoft Access Output): 允許你在轉換中創建一個新的 Access 數據庫文件作為輸出。

18、數據庫查詢(Database lookup):這個步驟類型允許你在數據庫表中查找值。

19、流查詢(Stream lookup):這個步驟類型允許你從其它步驟中查詢信息。首先,“源步驟”的數據被讀到內存中,然後被用來從主要的流中查詢數據。

20、調用數據庫存儲過程(Call DB Procedure):這個步驟允許你運行一個數據庫存儲過程,獲取返回結果。

21、HTTP 客戶端(HTTP Cient):HTTP 客戶端根據一個附帶條件的基準 URL,來調用一個簡單的調用。

22、字段選擇 (Select values) :這個步驟常常用來 選擇字段 重命名字段 指定字段的長度或者精度

下面是三個不同標簽的功能:

選擇和修改:指定需要流到輸出流中的字段的精確順序和名稱

刪除:指定必須從輸出流中刪除的字段

元數據:修改元數據字段的名稱、類型、長度和精度

23、過濾記錄(Filter rows):這個步驟允許你根據條件和比較符來過濾記錄。 一旦這個步驟連接到先前的步驟中,你可以簡單的單擊“<field>”,“=”和“<value>” 區域來構建條件。

24、排序記錄(Sort rows):這個步驟利用你指定的字段排序行,無論他們是按照升序還是降序。

備註:當行數超過 5000 行的時候,Kettle 使用臨時文件來排序行。

25、添加序列(Add sequence):這個步驟在流中增加一個序列。一個序列是在某個起始值和增量的基礎上,經常改變的整數值。你可以使用數據庫的序列,也可以使用 Kettle 決定的序列。

備註:Kettle 序列在同一個轉換中是唯一使用的。每一次轉換運行的時候,序列的值又會重新循環一次(從開始值開始)

26、空操作-什麽都不做(Dummy-do nothing):這個操作什麽都不做。它的主要作用是,在你想測試什麽的時候,充當一個占位符。例如有一個轉換,你至少需要兩個彼此連接的步驟。如果你想測試文本文件輸入步驟,你可以將它連接到一個 Dummy 步驟。

27、行轉列(Row Normaliser):這個步驟轉動表,標準化數據。

28、拆分字段(Split Fields):這個步驟允許你根據分隔符來拆分字段。

29、去除重復記錄(Unique rows):這個步驟從輸入流中稱移除重復的記錄。

30、分組(Group By)這個步驟允許你通過定義分組的字段來計算值。

例如:計算產品的平均銷售額,獲取庫存的黃色襯衫的數量等等。

31、設置為空值(Null if):如果某個字符串的值等於指定的值,設置那個值為空。

32、計算器(Calculator ):這個步驟提供一個功能列表,可以在字段值上運行。

計算器的一個重要優勢是,它有著幾倍於常用的 JavaScript 腳本的速度。

33、增加 XML (XML Add ):這個步驟允許你將在 XML 中的行字段內容編碼,XML 以字符串字段的形式添加到行中。

34、增加常量(Add constants ):這個步驟很簡單,主要是添加常量到流中。它的使用也很容易:用字符串形式指定名稱,類型和值。利用選擇的數據類型指定轉換格式。

36、行轉列(Row Denormaliser ):這個步驟允許你通過查詢鍵值對來反向規格化數據。也可以立即轉換數據類型。

37、行扁平化(Flattener ):這個步驟允許你扁平化預備的數據。

38、值映射(Value Mapper ):這個步驟簡單的映射字符串,從一個值映射到另一個值。通常你想解中轉換表的問題,不管怎麽說,這是一種可選的方案:簡單的將轉換表作一部分。

例如:如果你想替換 Language codes,你可以:

使用的字段名:LanuguageCode 目標字段名:LanguageDesc

源值/目標值:EN/English,FR/French,NL/Dutch,ES/Spanish,DE/German,…

39、被凍結的步驟(Blocking step ):它凍結所有的輸出,直到從上一步驟來的最後一行數據到達,最後一行數據將發送到下一步。你可以使用這個步驟觸發常用插件、存儲過程和 Java Script等等。

記錄關聯(笛卡爾輸出)(Join Rows-Cartesian Product ):這個步驟允許你組合輸入流中的所有行(笛卡爾輸出)。

40、數據庫連接(Database Join ):這個步驟允許你使用先前步驟的數據,運行一個數據庫查詢。能夠指定查詢參數:在 SQL 查詢中使用“?” ; 在 SQL 查詢中使用數據網格中的字段

42、合並記錄(Merge rows ):這個步驟允許你比較兩個行流。如果你想在兩個不同的時間比較比較數據,這是非常有用的。它常被用於數據倉庫源系統沒有包含最後更新日期的情況。

兩個行流被合並,一個是引用流(舊數據),一個比較流(新數據)。每次都是行的最後版本通過進入下一步驟。行有以下標記:

“identical”:關鍵字在兩個流中都存在,並且值相同

“changed”: 關鍵字在兩個流中都存在,但是一個或者更多的值不同

“new”:引用流中沒有找到關鍵字

“deleted”: 比較流中沒有找到關鍵字

比較流中的數據進入下一步驟,除非在“刪除“的情況。

43、存儲合並(Stored Merge ):這個步驟合並來自多個輸入步驟的數據行,並且這些行用指定的關鍵字排序。

44、合並連接(Merge Join) :這個步驟將來自兩個不同的步驟輸入的數據執行一個高效的合並。合並選項包括INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER。

備註:這個步驟將輸入的行按指定的字段存儲

45、Java Script 值(Java Script Value ):這個步驟允許你用 JavaScript 語言做復雜的運算。使用的 JavaScript 引擎是 Rhino 1.5R5。

46、改進的 Java Script 值(Modified Java Script Value ):這個步驟是“Javascript Values”的進改版本,它可以提供更好的效率,也更容

易使用。

47、執行 SQL 語句(Execute SQL script ):在這個步驟中你可以執行 SQL 腳本,或者在轉換初始化的時候執行,或者在步驟的每一個輸入行執行

49、聯合更新/查詢(Combination lookup/update ):這個步驟允許你在一個 junk-dimesion 表裏存儲信息。

50、映射(Mapping ):如果你希望某個轉換多次運行,你可以將重復的部分添加到一個映射中。映射是一個這樣的轉換:指定輸入如何從映射輸入中到達 ;指定輸入字段如何轉換:字段被添加或者刪除

51、從結果獲取記錄(Get rows from result ):這個步驟返回在一個任務中先前步驟生成的行。你可以進入選擇先前步驟生成的元數據字段。

52、復制記錄到結果(Copy rows to result ):這個步驟允許你在一個任務中將行數據(內存中的)傳遞到下一個步驟

53、設置變量(Set Variable):這個步驟允許你在一個任務中或者虛擬機中設置變量。它僅僅可以用一行數據來設置變量值。

54、獲取變量(Get Variable ):這個步驟允許你獲取一個變量,它可以返回行或者附加值到輸入行。

備註:你需要指定完整的變量格式${variable}或者%%variable%%。

55、從以前的結果獲取文件(Get files from result ):每次在轉換、任務、文件細節、任務條目、步驟等處理、使用或者創建一個文件時,文件被捕獲並且附加到結果中。你可以使用這個步驟訪問那些信息。

56、復制文件名到結果(Set files in result):在某種情況下,我們可以操縱輸出結果中的文件列表。例如 mail 任務條目可以使用文件列表來關聯郵件,可能你不需要發送所有的文件,你可以在此步驟中指定你想要發送的郵件。

57、記錄註射器(Injector ):註射器主要是針對以下人使用:想利用 Kettle API 和 JAVA 來註射記錄到轉換中。

58、套接字讀入器(Socket Reader):套接字讀入器是通過 TCP/IP 協議將數據從一個服務器向另一個服務器傳輸。

59、套接字輸寫器(Socket Writer):套接字輸寫器是通過 TCP/IP 協議將數據從一個服務器向另一個服務器傳輸。

60、聚合行(Aggregate Rows ):這個步驟允許你在所有行的基礎上快速的聚集行。

61、流 XML 輸入(Streaming XML Input):這個步驟主要提供值的解析,它信賴於 SAX 解析器,在大文件解析上能提供更好的性能。

它與 XML 輸入非常相似,僅僅在內容和字段制表符上略有不同。

62、中止(Abort ):這個步驟允許你在觀察輸入的時候中止步驟。它的主要用途是錯誤處理,在一定數量的行流過錯誤的連接時中止轉換。

63、Oracle 批量裝載(Oracle bulk loader ):這個步驟允許你大批量加載數據到 Oracle 數據庫,它將用一個正確的裝載格式,然後調用 Oracle 的 SQL*Loader 數據加載工具加載到指定的表中。

轉發自:https://www.cnblogs.com/zhaihongchang/p/9956676.html

Kettle安裝及使用