開源ETL工具:Kettle
Kettle也叫PDI,在2006年Kettle加入了開源的BI組織Pentaho,正式命名為PDI,英文全稱為Pentaho Data Integeration。Kettle是“Kettle E.T.T.L. Envirnonment”只取首字母的縮寫,這意味著它被設計用來幫助你實現你的ETTL需要:抽取、轉換、裝入和加載數據;翻譯成中文名稱應該叫水 壺,名字的起源正如該項目的主程序員MATT在一個論壇里說的那樣:希望把各種數據放到一個壺里然后以一種指定的格式流出。
Kettle允許管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。Kettle中有兩種腳本文件,轉 換(transformation)和工作(job),transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
Kettle整體結構圖:
Kettle的術語:
- Transformation:轉換步奏,可以理解為將一個或者多個不同的數據源組裝成一條流水線。然后最終輸出到某一個地方,文件或者數據庫等。
- Job:作業,可以調度設計好的轉換,也可以執行一些文件處理(比較,刪除),還可以上傳下載文件、發送郵件、執行Shell命令等。 Job與Transformation的差別是:Transformation專注于數據的ETL,而Job的范圍比較廣,可以是 Transformation,也可以是Mail、SQL、Shell、FTP等等,甚至可以是另外一個Job。
- Hop:連接Transformation步驟或者連接Job(實際上就是執行順序)的連線。
- Transformation hop:主要表示數據的流向。從輸入,過濾等轉換操作,到輸出。
- Job hop:可設置執行條件:無條件執行、當上一個Job執行結果為true時執行、當上一個Job執行結果為false時執行
Kettle家族目前包括4個產品:Spoon、Pan、CHEF、Kitchen。
- SPOON 允許你通過圖形界面來設計ETTL轉換過程(Transformation)。
- PAN 允許你批量運行由Spoon設計的ETL轉換 (例如使用一個時間調度器)。Pan是一個后臺執行的程序,沒有圖形界面。
- CHEF 允許你創建任務(Job)。 任務通過允許每個轉換,任務,腳本等等,更有利于自動化更新數據倉庫的復雜工作。任務通過允許每個轉換,任務,腳本等等。任務將會被檢查,看看是否正確地運行了。
- KITCHEN 允許你批量使用由Chef設計的任務 (例如使用一個時間調度器)。KITCHEN也是一個后臺運行的程序。
簡單的可理解為:
- Spoon:Transformation設計工具(GUI方式)
- Pan:Transformation執行器(命令行方式)
- Chef:Job設計工具(GUI方式)
- Kitchen:Job執行器(命令行方式)
Kettle是由純JAVA編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。要運行kettle工具必須 安裝Sun公司的JAVA運行環境,安裝好java環境后,在操作系統環境變量path中配置jre路徑,把kettle工具壓縮包解壓后可直接使用。 Spoon是一個圖形用戶界面,它允許你運行轉換或者任務,其中轉換是用Pan工具來運行,任務是用Kitchen來運行。Pan是一個數據轉換引擎,它 可以執行很多功能,例如:從不同的數據源讀取、操作和寫入數據。Kitchen是一個可以運行利用XML或數據資源庫描述的任務。通常任務是在規定的時間 間隔內用批處理的模式自動運行。下面是在不同的平臺上運行 Spoon所支持的腳本:
- Spoon.bat:在windows 平臺運行Spoon。
- Spoon.sh:在 Linux、Apple OSX、Solaris 平臺運行 Spoon。
資源庫是用來保存轉換任務的,用戶通過圖形界面創建的的轉換任務可以保存在資源庫中。資源庫可以使多用戶共享轉換任務,轉換任務在資源庫中是以文件夾形式分組管理的,用戶可以自定義文件夾名稱。資源庫有兩種形式:
- Kettle database repository,即保存在各種常見的數據庫資源庫類型,用戶通過用戶名/密碼來訪問資源庫中的資源,默認的用戶名/密碼是admin/admin和guest/guest。
- Kettle file repository,保存在服務器硬盤文件夾內的資源庫類型,此類型的資源庫無需用戶進行登錄,直接進行操作。
資源庫并不是必須的,如果沒有資源庫,用戶還可以把轉換任務保存在xml文件中。為了方便管理,建議用戶建立并使用數據庫類型資源庫Kettle database repository。
Kettle的應用場景:
- 表視圖模式:在同一網絡環境下,對各種數據源的表數據進行抽取、過濾、清洗等,例如歷史數據同步、異構系統數據交互、數據對稱發布或備份等都歸屬 于這個模式;傳統的實現方式一般都要進行研發(一小部分例如兩個相同表結構的表之間的數據同步,如果SQL Server數據庫可以通過發布/訂閱實現)。
- 前置機模式:這是一種典型的數據交換應用場景,數據交換的雙方A和B網絡不通,但是A和B都可以和前置機C連接,一般的情況是雙方約定好前置機的 數據結構,這個結構跟A和B的數據結構基本上是不一致的,這樣我們就需要把應用上的數據按照數據標準推送到前置機上,此時可通過Kettle實現;
- 文件模式: 數據交互的雙方A和B是完全的物理隔離,這樣就只能通過以文件的方式來進行數據交互了,例如XML格式,在應用A中我們開發一個接口用來生成標準格式的 XML,然后用介質在某一時間把XML數據拷貝之后,然后接入到應用B上,應用B上在按照標準接口解析相應的文件把數據接收過來;
Kettle轉化功能介紹
- Kettle 中有兩種腳本文件,transformation (.ktr)和 job(.kjb),transformation 完成針對數據的基礎轉換,job 則完成整個工作流的控制。
- 所有功能支持控件化,使用簡單
- 支持多樣化數據源類型:
- 基本的文本文件
- Access、Excel、XML、Property文件格式
- MDX查詢語言、 Cube文件、Streaming XML數據流
- 自動產生空記錄或者行
- 從XBase類型文件(DBF)讀取數據
- 關系型數據庫
- 獲取系統信息如文件名稱、系統時間等
- 特殊目標數據源支持
- 把數據寫入到Cube
- 把數據寫入XML
- 支持多種查詢
- 調用數據庫存儲過程
- 基本的數據庫查詢
- 判斷表以及列、操作系統文件是否存在
- 從URL接收查詢
- 使用Web服務查詢信息
- 使用數據流中的值作為參數來執行一個數據庫查詢
- 流查詢:從轉換中其他流里查詢值
- 轉換功能
- 值映射、分組、去重、拆分字段、行列轉換
- 復制行
- 支持的腳本
- JS腳本
- SQL腳本
- 正則表達式
- 支持漸變維度更新
- 批量加載:
- Greenplum Bulk Loader
- Oracle Bulk Loader
- MSSQL Bulk Loader
- MYSQL Bulk Loader
- PostgreSQL Bulk Loader
- 支持分區表和集群
- 支持大數據對接
- Avro Input
- Cassandra Input &
Kettle作業功能介紹
- 可以執行操作系統命令和操作:
- Ping 主機
- 寫日志
- 發送郵件
- 從POP Server獲取郵件并保存在本地
- 比較文件夾、文件
- 創建、復制、移動、刪除、壓縮文件
- 從HTTP獲取或者上傳文件
- 操作延遲等待
- 判斷文件是否存在
- 執行JavaScript、SQL、Shell腳本
- 支持安全FTP獲取、上傳文件
- 刪除遠程文件
- 支持SSH2上傳下載
Kettle的功能非常強大,數據抽取效率也比較高,開源產品,可以進行第三方修改,工具中的控件能夠實現數據抽取的大部分需求。所有功能支持控件化,使用簡單。
官方網站:http://community.pentaho.com/projects/data-integration/