ETL開源項目-Kettle

 


(From: http://www.builder.com.cn/2008/0916/1130185.shtml)

說到ETL開源項目,Kettle當屬翹首,因此,偶決定花點時間瞭解一下。

  項目名稱很有意思,水壺。按項目負責人Matt的說法:把各種數據放到一個壺裏,然後呢,以一種你希望的格式流出。呵呵,外國人都很有聯想力。

  看了提供的文檔,然後對發佈程序的簡單試用後,可以很清楚得看到Kettle的四大塊:

  Chef——工作(job)設計工具 (GUI方式)

  Kitchen——工作(job)執行器 (命令行方式)

  Spoon——轉換(transform)設計工具 (GUI方式)

  Span——轉換(trasform)執行器 (命令行方式)

  嗯,廚師已經在廚房裏,勺子和盤子一應俱全,且看能做出如何的大餐?

  一:Chef——工作(job)設計器

  這是一個GUI工具,操作方式主要通過拖拖拉拉,勿庸多言,一看就會。

  何謂工作? 多個作業項,按特定的工作流串聯起來,開成一項工作。正如:我的工作是軟件開發。我的作業項是:設計、編碼、測試!先設計,如果成功,則編碼,否則繼續設計,編碼完成則開始設計,周而復始,作業完成。

  來,看看Chef中的作業項:

  1.1: 轉換:指定更細的轉換任務,通過Spoon生成。通過Field來輸入參數。

  1.2: SQL:sql語句執行,

  1.3: FTP:下載ftp文件。

  1.4: 郵件:發送郵件。

  1.5: 檢查表是否存在,

  1.6: 檢查文件是否存在,

  1.7: 執行shell腳本。如:dos命令。

  1.8: 批處理。(注意:windows批處理不能有輸出到控制檯)。

  1.9: Job包。作爲嵌套作業使用。

  1.10:JavaScript執行。這個比較有意思,我看了一下源碼,如果你有自已的Script引擎,可以很方便的替換成自定義Script,來擴充其功能。

  1.11:SFTP:安全的Ftp協議傳輸。

  1.12:HTTP方式的上/下傳。 好了,看看工作流:

  如上文所述,工作流是作業項的連接方式。分爲三種:無條件,成功,失敗。這個沒啥好說的,從名字就能知道它的意圖。

  嗯,爲了方便工作流使用,提供了幾個輔助結點單元(你也可將其作爲簡單的作業項):

  1:Start單元,任務必須由此開始。設計作業時,以此爲起點。

  2:OK單元:可以編制做爲中間任務單元,且進行腳本編制,用來控制流程。

  3:ERROR單元:用途同上。

  4:DUMMY單元:啥都不做,主要是用來支持多分支的情況。文檔中有例子,不再多說。

  存儲方式:

  支持XML存儲,或存儲到指定數據庫中。

  一些默認的配置(如數據庫存儲位置……),在系統的用戶目錄下,單獨建立了一個.Kettle目錄,用來保存用戶的這些設置。

  LogView:可查看執行日誌。

  二:Kitchen——作業執行器

  是一個作業執行引擎,用來執行作業。這是一個命令行執行工具,沒啥可講的,就把它的參數說明列一下。

  -rep : Repository name 任務包所在存儲名

  -user : Repository username 執行人

  -pass : Repository password 執行人密碼

  -job : The name of the job to launch 任務包名稱

  -dir : The directory (don't forget the leading / or )

  -file : The filename (Job XML) to launch

  -level : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日誌級別

  -log : The logging file to write to 指定日誌文件

  -listdir : List the directories in the repository 列出指定存儲中的目錄結構。

  -listjobs : List the jobs in the specified directory 列出指定目錄下的所有任務

  -listrep : List the defined repositories 列出所有的存儲

  -norep : Don't log into the repository 不寫日誌

  嗯,居然不支持調度。看了一下文檔,建議使用操作系統提供的調度器來實現調度,比如:Windows可以使用它的任務計劃工具。 三:Spoon——轉換過程設計器

  GUI工作,用來設計數據轉換過程,創建的轉換可以由Pan來執行,也可以被Chef所包含,作爲作業中的一個作業項。

  下面簡單列舉一下所有的轉換過程。(簡單描述,詳細的可見Spoon文檔)

  3.1:Input-Steps:輸入步驟

  3.1.1:Text file input:文本文件輸入,

  可以支持多文件合併,有不少參數,基本一看參數名就能明白其意圖。

  3.1.2:Table input:數據表輸入

  實際上是視圖方式輸入,因爲輸入的是sql語句。當然,需要指定數據源(數據源的定製方式在後面講一下)

  3.1.3:Get system info:取系統信息

  就是取一些固定的系統環境值,如本月最後一天的時間,本機的IP地址之類。

  3.1.4:Generate Rows:生成多行。

  這個需要匹配使用,主要用於生成多行的數據輸入,比如配合Add sequence可以生成一個指定序號的數據列。

  3.1.5:XBase Input:

  3.1.6:Excel Input:

  3.1.7:XML Input:

  這三個沒啥可講的,看看參數就明瞭。

  3.2:Output-Steps: 輸出步聚

  3.2.1:Text file output:文本文件輸出。

  這個用來作測試蠻好,呵呵。很方便的看到轉換的輸出。

  3.2.2:Table output:輸出到目的表。

  3.2.3:Insert/Update:目的表和輸入數據行進行比較,然後有選擇的執行增加,更新操作。

  3.2.4:Update:同上,只是不支持增加操作。

  3.2.5:XML Output:

  3.3:Look-up:查找操作

  DataBase:

  Stream:

  Procedure:

  Database join:

  很簡單,看看參數就明白了。 3.4:Transform 轉換 (嗯,重點)

  3.4.1:Select values: 對輸入的行記錄數據 的字段進行更改 (更改數據類型,更改字段名或刪除)

  數據類型變更時,數據的轉換有固定規則,可簡單定製參數。可用來進行數據表的改裝。

  3.4.2: Filter rows: 對輸入的行記錄進行 指定複雜條件 的過濾。

  用途可擴充sql語句現有的過濾功能。但現有提供邏輯功能超出標準sql的不多。

  3.4.3:Sort rows:對指定的列以升序或降序排序,當排序的行數超過5000時需要臨時表。

  3.4.4:Add sequence:爲數據流增加一個序列,

  這個配合其它Step(Generate rows, rows join),可以生成序列表,如日期維度表(年、月、日)。

  3.4.5:Dummy:不做任何處理,主要用來作爲分支節點。

  3.4.6:Join Rows:對所有輸入流做笛卡兒乘積。

  3.4.7:Aggregate:聚合,分組處理

  3.4.8:Group by:分組

  用途可擴充sql語句現有的分組,聚合函數。但我想可能會有其它方式的sql語句能實現。

  3.4.9:Java Script value:使用mozilla的rhino作爲腳本語言,並提供了很多函數,用戶可以在腳本中使用這些函數。

  3.4.10. Row Normaliser:該步驟可以從透視表中還原數據到事實表,

  通過指定維度字段及其分類值,度量字段,最終還原出事實表數據。

  3.4.11. Unique rows:去掉輸入流中的重複行

  在使用該節點前要先排序,否則只能刪除連續的重複行。

  3.4.12. Calculator:提供了一組函數對列值進行運算,

  所介紹,使用該方式比用戶自定義JAVA SCRIPT腳本速度更快。

  3.4.13. Merge Rows:用於比較兩組輸入數據,一般用於更新後的數據重新導入到數據倉庫中。

  3.4.14. Add constants:增加常量值。

  這個我沒弄明白它的用法???

  3.4.15. Row denormaliser:同Normaliser過程相反。

  3.4.16. Row flattener:表扁平化處理

  指定需處理的字段和扃平化後的新字段,將其它字段做爲組合Key進行扃平化處理。

  3.5:Extra:除了上述基本節點類型外還定義了擴展節點類型

  3.5.1:SPLIT FIELDS, 按指定分隔符拆分字段

  3.5.2:EXECUTE SQL SCRIPT,執行SQL語句

  3.5.3:CUBE INPUT,

  3.5.4:CUBE OUTPUT等。

  這兩個沒明白是啥意思。  3.6:其它

  存儲方式: 與Chef相同。

  數據源(Connection);見後。

  Hops:setp連接起來,形成Hops。

  Plugin step types等節點:這個沒仔細看,不知如何製作Plugin step。

  LogView:可查看執行日誌。

  四:Pan——轉換的執行工具

  命令行執行方式,可以執行由Spoon生成的轉換任務。

  同樣,不支持調度。

  參數與Kitchen類似,可參見Pan的文檔。

  五:其它

  Connection:

  可以配置多個數據源,在Job或是Trans中使用,這意味着可以實現跨數據庫的任務。

  支持大多數市面上流行的數據庫。

  個人感覺:(本人不成熟的看法)

  1:轉換功能全,使用簡潔。作業項豐富,流程合理。但缺少調度。

  2:java代碼,支持的數據源範圍廣,所以,跨平臺性較好。

  3:從實際項目的角度看,和其它開源項目類似,主要還是程序員的思維,缺少與實際應用項目(專業領域)的更多接軌,當然,項目實施者的專注點可能在於一個平臺框架,而非實際應用(實際應用需要二次開發)。

  4:看過了大多數源碼,發現源碼的可重用性不是太好(缺少大粒度封裝),有些關鍵部分好象有Bug。

  比如:個別class過於臃腫,線程實現的同步有問題。

  5:提供的工具有些小錯,如參數的容錯處理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章