一:下載路徑
當你要學習一個工具時,往往一開始就找不到下載路徑,也不知道是為什么,連個官網都找不到,最后還是問的別人要的路徑,做程序好心酸。
http://community.pentaho.com/projects/data-integration 下載路徑
二:學習
kettle是什么?
ETL(Extract-Transform-Load的縮寫,即數據抽取、轉換、裝載的過程),對於企業或行業應用來說,我們經常會遇到各種數據的處理,轉換,遷移,所以了解並掌握一種etl工具的使用,必不可少。kettle支持圖形化的GUI設計界面,然后可以以工作流的形式流轉,在做一些簡單或復雜的數據抽取、質量檢測、數據清洗、數據轉換、數據過濾等方面有着比較穩定的表現,其中最主要的我們通過熟練的應用它,減少了非常多的研發工作量,提高了我們的工作效率.
Kettle是一款國外開源的ETL工具,純Java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。
Kettle 中文名稱叫水壺,該項目的主程序員MATT 希望把各種數據放到一個壺里,然后以一種指定的格式流出。
Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
為什么使用kettle?
這里簡單概括一下幾種具體的應用場景,按網絡環境划分主要包括:
-
表視圖模式:這種情況我們經常遇到,就是在同一網絡環境下,我們對各種數據源的表數據進行抽取、過濾、清洗等,例如歷史數據同步、異構系統數據交互、數據對稱發布或備份等都歸屬於這個模式;傳統的實現方式一般都要進行研發(一小部分例如兩個相同表結構的表之間的數據同步,如果sqlserver數據庫可以通過發布/訂閱實現),涉及到一些復雜的一些業務邏輯如果我們研發出來還容易出各種bug;
-
前置機模式:這是一種典型的數據交換應用場景,數據交換的雙方A和B網絡不通,但是A和B都可以和前置機C連接,一般的情況是雙方約定好前置機的數據結構,這個結構跟A和B的數據結構基本上是不一致的,這樣我們就需要把應用上的數據按照數據標准推送到前置機上,這個研發工作量還是比較大的;
-
文件模式: 數據交互的雙方A和B是完全的物理隔離,這樣就只能通過以文件的方式來進行數據交互了,例如XML格式,在應用A中我們開發一個接口用來生成標准格式的XML,然后用優盤或者別的介質在某一時間把XML數據拷貝之后,然后接入到應用B上,應用B上在按照標准接口解析相應的文件把數據接收過來;
綜上3種模式如果我們都用傳統的模式無疑工作量是巨大的,那么怎么做才能更高效更節省時間又不容易出錯呢?答案是我們可以用一下Kettle-_-!
使用kettle需要了解的知識?
|
Main Tree菜單列出的是一個transformation中基本的屬性,可以通過各個節點來查看。
DB連接:顯示當前transformation中的數據庫連接,每一個transformation的數據庫連接都需要單獨配置。
Steps:一個transformation中應用到的環節列表
Hops:一個transformation中應用到的節點連接列表 |
![]() |
Core Objects菜單列出的是transformation中可以調用的環節列表,可以通過鼠標拖動的方式對環節進行添加。
Input:輸入環節 Output:輸出環節 Lookup:查詢環節 Transform:轉化環節 Joins:連接環節 Scripting:腳本環節 |

類別 |
環節名稱 |
功能說明 |
Input |
文本文件輸入 |
從本地文本文件輸入數據 |
表輸入 |
從數據庫表中輸入數據 |
|
獲取系統信息 |
讀取系統信息輸入數據 |
|
Output |
文本文件輸出 |
將處理結果輸出到文本文件 |
表輸出 |
將處理結果輸出到數據庫表 |
|
插入/更新 |
根據處理結果對數據庫表機型插入更新,如果數據庫中不存在相關記錄則插入,否則為更新。會根據查詢條件中字段進行判斷 |
|
更新 |
根據處理結果對數據庫進行更新,若需要更新的數據在數據庫表中無記錄,則會報錯停止 |
|
刪除 |
根據處理結果對數據庫記錄進行刪除,若需要刪除的數據在數據庫表中無記錄,則會報錯停止 |
|
Lookup |
數據庫查詢 |
根據設定的查詢條件,對目標表進行查詢,返回需要的結果字段 |
流查詢 |
將目標表讀取到內存,通過查詢條件對內存中數據集進行查詢 |
|
調用DB存儲過程 |
調用數據庫存儲過程 |
|
Transform |
字段選擇 |
選擇需要的字段,過濾掉不要的字段,也可做數據庫字段對應 |
過濾記錄 |
根據條件對記錄進行分類 |
|
排序記錄 |
將數據根據某以條件,進行排序 |
|
空操作 |
無操作 |
|
增加常量 |
增加需要的常量字段 |
|
Scripting |
Modified Java Script Value |
擴展功能,編寫JavaScript腳本,對數據進行相應處理 |
Mapping |
映射(子轉換) |
數據映射 |
Job |
Sat Variables |
設置環境變量 |
Get Variables |
獲取環境變量 |
|
Main Tree菜單列出的是一個Job中基本的屬性,可以通過各個節點來查看。
DB連接:顯示當前Job中的數據庫連接,每一個Job的數據庫連接都需要單獨配置。
Job entries:一個Job中引用的環節列表
|
|
Job entries菜單列出的是Job中可以調用的環節列表,可以通過鼠標拖動的方式對環節進行添加。
每一個環節可以通過鼠標拖動來將環節添加到主窗口中。
並可通過shift+鼠標拖動,實現環節之間的連接。 |
類別 |
環節名稱 |
功能說明 |
Job entries |
START |
開始 |
DUMMY |
結束 |
|
Transformation |
引用Transformation流程 |
|
Job |
引用Job流程 |
|
Shell |
調用Shell腳本 |
|
SQL |
執行sql語句 |
|
FTP |
通過FTP下載 |
|
Table exists |
檢查目標表是否存在,返回布爾值 |
|
File exists |
檢查文件是否存在,返回布爾值 |
|
Javascript |
執行JavaScript腳本 |
|
Create file |
創建文件 |
|
Delete file |
刪除文件 |
|
Wait for file |
等待文件,文件出現后繼續下一個環節 |
|
File Compare |
文件比較,返回布爾值 |
|
Wait for |
等待時間,設定一段時間,kettle流程處於等待狀態 |
|
Zip file |
壓縮文件為ZIP包 |
怎么使用kettle?
一:配置環境
1、安裝java JDK
1)首先到官網上下載對應JDK包,JDK1.5或以上版本就行;
2)安裝JDK;
3)配置環境變量,附配置方式:
安裝完成后,還要對它進行相關的配置才可以使用,先來設置一些環境變量,對於Java來說,最需要設置的環境變量是系統路徑變量path。
(1)要打開環境變量的設置窗口。右擊“我的電腦”,在彈出的快捷菜單中選擇“屬性”選項,進入“系統屬性”對話框,如圖所示。選擇“高級”標簽,進入“高級”選項卡,再單擊“環境變量”按鈕,進入“環境變量”對話框,如圖所示:
(2)在“Administrator的用戶變量”列表框中,選擇變量PATH,待其所在行變高亮后,單擊“編輯”按鈕,如圖所示。
(3)在彈出的“編輯系統變量”對話框中,將JDK安裝路徑下的bin目錄路徑設置到Path變量中,如圖所示。
編輯完后,單擊“確定”按鈕,進行保存,環境變量Path的設置就正式完成。
注意:設置Path變量的路徑,必須是JDK安裝目錄中的bin目錄,有時候在JDK安裝目錄的同一層會有JRE的安裝目錄,因此請謹慎選取相關路徑,避免將路徑設置成JRE目錄下的bin目錄。
3、2 測試JDK配置是否成功
設置好環境變量后,就可以對剛設置好的變量進行測試,並檢測Java是否可以運行。
(1)單擊“開始”按鈕,選擇“運行”選項,在“運行”對話框中輸入cmd命令。
(2)之后單擊“確定”按鈕,打開命令行窗口。
(3)在光標處輸入:javac命令,按下Enter鍵執行,即可看到測試結果
3、3 運行Kettle

這樣配置環境這一塊基本上就完成了。
二、練習
功能簡述:數據庫TestA中的UserA表到數據庫TestB的UserB表;
實現流程:建立一個轉換和一個作業Job;
進入到Kettle目錄,如果Kettle部署在windows環境下,雙擊運行spoon.bat或Kettle.exe文件。
不輸入密碼進入,可以看到主對象樹和核心對象.
新建一個轉換后,看到轉換下有DB連接,Steps,Hops,數據庫分區schemas,子服務器,kettle集群schemas
A:建立一個轉換:打開Kettle.exe,選擇沒有資源庫,進入主界面,新建一個轉換,轉換的后綴名為ktr,轉換建立的步驟如下:
步驟1建立DB連接:創建DB連接,選擇新建DB連接,如下圖,我們輸入相應的數據庫配置信息之后點擊Test按鈕測試是否配置正確!
填入信息,最后要起連接名testA,先點擊test測試連接,如果報錯,可能是數據庫信息填的不對。
Host Name:10.8.200.105/localhost
Database Name:lifedev
Port Number:1521
User Name:...
password:...
點擊test進行連接測試。
建立好DB連接后,會出現子節點testA、testB
步驟2:建立步驟和步驟關系,
點擊核心對象,我們從步驟樹輸入中選擇【表輸入】,如下圖,這樣拖拽一個表輸入之后,我們雙擊表輸入之后,我們自己可以隨意寫一個sql語句,這個語句表示可以在這個庫中隨意組合,只要sql語句沒有錯誤即可,我這里只是最簡單的把TestA中的所有數據查出來,語句為select * from LXX_KETTLE_TESTA
接下來我們創建另外一個步驟輸出中的【插入/ 更新】,然后在【表輸入】上同時按住shift鍵和鼠標左鍵滑向【插入/ 更新】,這樣建立兩個步驟之間的連接,【插入/ 更新】執行的邏輯是如果UserA表中的記錄在UserB中不存在那么就插入,如果存在就更新,如下圖,在插入更新中我們可以做一些關鍵條件和字段映射,這里我們是最簡單的!點擊保存,把我們建立的轉換保存一下。
建立好轉換之后,我們可以直接運行這個轉換,檢查一下是否有錯,如圖,有錯誤都會在下面的控制台上輸出。
點擊運行按鈕可選擇本地遠程或遠程執行或集群方式執行,我選擇本地執行,之后提示文件已經改變,在運行轉換前請先保存它,你想現在保存這個轉換嗎?可以選擇保存下來。
步驟三:如果我們需要讓這個轉換定時執行怎么辦呢,那么我們需要建立一個作業job
見下圖,在簡單表同步這個轉換中,我們把在A步驟中建立的ktl配置上,注意路徑的正確性;
這樣我們在【Start】步驟上面雙擊,如圖:
這樣這個作業就制定好了,點擊保存之后,我們就可以在圖形化界面上點擊開始執行了!
實例2:全面進階的一個稍微復雜的例子



操作步驟:
在EtltestTrans頁面下,點擊左側的【Core Objects】,點擊【Input】,選中【表
輸入】,拖動到主窗口釋放鼠標。
雙擊【表輸入】圖標
數據庫連接選擇剛剛創建好的etltest數據庫連接,在主窗口寫入對應的查詢
語句
Select * from trade ,如下圖:
點擊確定完成。
點擊核心對象->查詢,選中【數據庫查詢】,拖動到主窗口釋放鼠標。
按住shift鍵,用鼠標點中剛才創建的【表輸入】,拖動到【數據庫查詢】上,
則建立了兩個環節之間的連接,如圖:
雙擊【數據庫查詢】
步驟名稱寫入account 表查詢,數據庫連接選擇剛剛創建好的etltest 數據庫
連接,查詢的表寫入account,查詢所需的關鍵字中,表字段寫入acctno,比較
操作符寫入“=”,字段1寫入acctno。
在查詢表返回的值里面寫入custno,確定完成,如下圖:
同上,再創建一個數據庫查詢,命名為cust表查詢,查詢的表寫入cust,查
詢所需的關鍵字寫入custno=custno,查詢表返回的值寫入custname,custid,
custtype,如下圖:
點擊核心對象->Flow下過濾記錄,拖動到主窗口釋放鼠標。
點擊核心對象->腳本,選中兩個【Modified Java Script Value】,拖動到主窗
口釋放鼠標。分別雙擊打開,重命名為“對公類型修改”和“對私類型修改”。
同時,分別創建【過濾記錄】和【對公類型修改】,【對私類型修改】的連接。
雙擊過濾記錄打開。
第一個<field>里面選擇custtype,點擊<value>,在Enter value 里面寫入1,
確定,如圖:
在發送true數據給步驟里,選擇【對私類型修改】,在發送false數據給步驟
里,選擇【對公類型修改】,確定保存,如圖:
雙擊【對公類型修改】,在里面寫入javascript 腳本語句
var custtype_cn='對公客戶交易'
在字段中寫入custtype_cn,類型選為string。確定。
同理,在【對私類型修改】中,在里面寫入javascript腳本語句
var custtype_cn='對私客戶交易'
在字段中寫入custtype_cn,類型選為string。確定。
點擊左側的【Transform】,選中兩個【增加常量】,拖動到主窗口釋放鼠標。
分別雙擊打開,重命名為“增加對公常量”和“增加對私常量”。
分別建立【對公類型修改】和【對私類型修改】與【增加對公常量】和【增
加對私常量】的連接,如圖:
雙擊【增加對公常量】,名稱寫入value,類型選擇string,值寫入“這是一
筆對公客戶發生的交易”,確定保存。
同理,雙擊【增加對私常量】,名稱寫入value,類型選擇string,值寫入“這
是一筆對私客戶發生的交易”,確定保存。
點擊左側的【Output】,選中【文本文件輸出】,拖動到主窗口釋放鼠標。
建立【增加對公常量】,【增加對私常量】和【文本文件輸出】的連接,如圖:
雙擊打開【文本文件輸出】,文件名稱寫入D:\etltest\etltest.txt
點擊內容標簽,根據情況進行修改,例如
點擊字段標簽
名稱依次寫入tradeid,acctno,amt,custno,custname,custid,custtype_cn,
value,類型根據各個字段實際類型進行選擇
確定保存
點擊保存創建好的transformation。
點擊運行這個轉換。
點擊launch,開始運行
當所有狀態都變已完成時,則轉換完成,如圖: