1. 程式人生 > >Kettle-6.1安裝部署及使用教程

Kettle-6.1安裝部署及使用教程

一、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 資料載入工具載入到指定的表中。