詳解ETL工具十大必備的功能特性
概述
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運(yùn)行。
說白了就是,很有必要去理解一般ETL工具必備的特性和功能,這樣才更好的掌握Kettle的使用。今天主要先描述ETL工具的通用功能。

ETL工具的功能之一:連接
任何ETL工具都應(yīng)該有能力連接到類型廣泛的數(shù)據(jù)源和數(shù)據(jù)格式。對于最常用的關(guān)系型數(shù)據(jù)庫系統(tǒng),還要提供本地的連接方式(如對于Oracle的OCI),ETL應(yīng)該能提供下面最基本的功能:

- 連接到普通關(guān)系型數(shù)據(jù)庫并獲取數(shù)據(jù),如常見的Orcal、MS SQL Server、IBM DB/2、Ingres、MySQL和PostgreSQL。還有很多很多
- 從有分隔符和固定格式的ASCII文件中獲取數(shù)據(jù)
- 從XML文件中獲取數(shù)據(jù)
- 從流行的辦公軟件中獲取數(shù)據(jù),如Access數(shù)據(jù)庫和Excel電子表格
- 使用FTP、SFTP、SSH方式獲取數(shù)據(jù)(最好不用腳本)
- 還能從Web Services 或 RSS中獲取數(shù)據(jù)。如果還需要一些ERP系統(tǒng)里的數(shù)據(jù),如Oracle E-Business Suite、SAP/R3、PeopleSoft 或 JD/Edwards,ETL工具也應(yīng)該提供到這些系統(tǒng)的連接。
- 還能提供Salesforce.com和SAP/R3的輸入步驟,但不是套件內(nèi),需要額外安裝。對于其他ERP和財(cái)務(wù)系統(tǒng)的數(shù)據(jù)抽取還需要其他解決方案。當(dāng)然,最通用的方法就是要求這些系統(tǒng)導(dǎo)出文本格式的數(shù)據(jù),將文本數(shù)據(jù)作為數(shù)據(jù)源。
ETL工具的功能之二:平臺獨(dú)立
一個ETL工具應(yīng)該能在任何平臺下甚至是不同平臺的組合上運(yùn)行。一個32位的操作系統(tǒng)可能在開發(fā)的初始階段運(yùn)行很好,但是當(dāng)數(shù)據(jù)量越來越大時,就需要一個更強(qiáng)大的操作系統(tǒng)。另一種情況,開發(fā)一般是在Windows或 Mac機(jī)上運(yùn)行的。而生產(chǎn)環(huán)境一般是Linux系統(tǒng)或集群,你的ETL解決方案應(yīng)該可以無縫地在這些系統(tǒng)間切換。
ETL工具的功能之三:數(shù)據(jù)規(guī)模
一般ETL能通過下面的3種方式來處理大數(shù)據(jù)。
- 并發(fā):ETL過程能夠同時處理多個數(shù)據(jù)流,以便利用現(xiàn)代多核的硬件架構(gòu)。
- 分區(qū):ETL能夠使用特定的分區(qū)模式,將數(shù)據(jù)分發(fā)到并發(fā)的數(shù)據(jù)流中。
- 集群:ETL過程能夠分配在多臺機(jī)器上聯(lián)合完成。
Kettle是基于Java的解決方案,可以運(yùn)行在任何安裝了Java虛擬機(jī)的計(jì)算機(jī)上(包括Windows、Linux和Mac)。轉(zhuǎn)換里的每個步驟都是以并發(fā)的方式來執(zhí)行,并且可以執(zhí)行多次,這樣加快了處理速度。
Kettle在運(yùn)行轉(zhuǎn)換時,根據(jù)用戶的設(shè)置,可以將數(shù)據(jù)以不同的方式發(fā)送到多個數(shù)據(jù)流中(有兩種幾本發(fā)送方式:分發(fā)和復(fù)制)。分發(fā)類似與分發(fā)撲克牌,以輪流的方式將每行數(shù)據(jù)只發(fā)給一個數(shù)據(jù)流,復(fù)制是將每行數(shù)據(jù)發(fā)給所有數(shù)據(jù)流。
為了更精確控制數(shù)據(jù),Kettle還使用了分區(qū)模式,通過分區(qū)可以將同一特征的數(shù)據(jù)發(fā)送到同一個數(shù)據(jù)流。這里的分區(qū)只是概念上類似于數(shù)據(jù)庫的分區(qū)。
Kettle并沒有針對數(shù)據(jù)庫分區(qū)有什么功能。
ETL工具的功能之四:設(shè)計(jì)靈活性
一個ETL工具應(yīng)該留給開發(fā)人員足夠的自由度來使用,而不能通過一種固定的方式來限制用戶的創(chuàng)造力和設(shè)計(jì)的需求。ETL工具可以分為基于過程的和基于映射的。
基于映射的功能只在源數(shù)據(jù)和目的數(shù)據(jù)之間提供了一組固定的步驟,嚴(yán)重限制了設(shè)計(jì)工作的自由度?;谟成涞墓ぞ咭话阋子谑褂?,可快速上手,但是對于更復(fù)雜的任務(wù),基于過程的工具才是組好的選擇。
使用Kettle這樣基于過程的工具,根據(jù)實(shí)際的數(shù)據(jù)和也許需求,可以創(chuàng)建自定義的步驟和轉(zhuǎn)換。
ETL工具的功能之五:復(fù)用性
設(shè)計(jì)完的ETL轉(zhuǎn)換應(yīng)該可以被復(fù)用,這是非常重要的。復(fù)制和粘貼已經(jīng)存在的轉(zhuǎn)換步驟是最常見的一種復(fù)用,但這不是真正意義上的復(fù)用。
Kettle里有一個映射(子轉(zhuǎn)換)步驟,可以完成轉(zhuǎn)換的復(fù)用,該步驟可以將一個轉(zhuǎn)換作為其他轉(zhuǎn)換的子轉(zhuǎn)換。另外轉(zhuǎn)換還可以在多個作業(yè)里多次使用,同樣作業(yè)也可以為其他作業(yè)的子作業(yè)。
ETL工具的功能之六:擴(kuò)展性
大家都知道,幾乎所有的ETL工具都提供了腳本,以編程的方式來解決工具本身不能解決的問題。另外,還有少數(shù)幾款ETL工具可以通過API或其他方式為工具增加組件。使用腳本語言寫函數(shù),函數(shù)可以被其他轉(zhuǎn)換或腳本調(diào)用。
Kettle提供了上述的所有功能。Java腳本步驟可以用來開發(fā)Java腳本,把這個腳本保存為一個轉(zhuǎn)換,再通過映射(子轉(zhuǎn)換)步驟,又可以變?yōu)橐粋€標(biāo)準(zhǔn)的可以復(fù)用的函數(shù)。實(shí)際上,并不限于腳本,每個轉(zhuǎn)換都可以通過這種映射(子轉(zhuǎn)換)方式來復(fù)用,如同創(chuàng)建了一個組件。Kettle在設(shè)計(jì)上就是可擴(kuò)展的,它提供了一個插件平臺。這種插件架構(gòu)允許第三方為Kettle平臺開發(fā)插件。
Kettle里的所有插件,即使是默認(rèn)提供的組件,實(shí)際上也都是插件。內(nèi)置的第三方插件和Pentaho插件的唯一區(qū)別就是技術(shù)支持。假設(shè)你買了一個第三方插件(例如一個SugarCRM的連接),技術(shù)支持由第三方提供,而不是由Pentaho提供。
ETL工具的功能之七:數(shù)據(jù)轉(zhuǎn)換
ETL項(xiàng)目很大一部分工作都是在做數(shù)據(jù)轉(zhuǎn)換。在輸入和輸出之間,數(shù)據(jù)要經(jīng)過校驗(yàn)、連接、分隔、合并、轉(zhuǎn)置、排序、合并、克隆、排重、過濾、刪除、替換或者其他操作。

在不同機(jī)構(gòu)、項(xiàng)目和解決方案里,數(shù)據(jù)轉(zhuǎn)換的需求都大不相同,所以很難說清一個ETL工具最少應(yīng)該提供哪些轉(zhuǎn)換功能。但是呢,常用的ETL工具(包括Kettle)都提供了下面一些最基本的整合功能:
- 緩慢變更維度
- 查詢值
- 行列轉(zhuǎn)換
- 條件分隔
- 排序、合并、連接
- 聚集
ETL工具的功能之八:測試和調(diào)試
測試通常分為黑盒測試(也叫功能測試)和白盒測試(結(jié)構(gòu)測試)。
黑盒測試,ETL轉(zhuǎn)換就被認(rèn)為是一個黑盒子,測試者并不了解黑盒子的功能,只知道輸入和期望的輸出。
白盒測試,要求測試者知道轉(zhuǎn)換內(nèi)部的工作機(jī)制并依此設(shè)計(jì)測試用例來檢查特定的轉(zhuǎn)換是否有特定的結(jié)果。
調(diào)試實(shí)際是白盒測試中的一部分,通過高度可以讓開發(fā)者或測試者一步一步地運(yùn)行一個轉(zhuǎn)換,并找出問題的所在。
ETL工具的功能之九:血統(tǒng)分析和影響分析
任何ETL工具都應(yīng)該有一個重要的功能:讀取轉(zhuǎn)換的元數(shù)據(jù),它是提取由不同轉(zhuǎn)換構(gòu)成的數(shù)據(jù)流的信息。
血統(tǒng)分析和影響分析是基于元數(shù)據(jù)的兩個相關(guān)的特性。
血統(tǒng)是一種回溯性的機(jī)制,它可以查看到數(shù)據(jù)的來源。
影響分析是基于元數(shù)據(jù)的另一種分析方法,可以分析源數(shù)據(jù)對隨后的轉(zhuǎn)換以及目標(biāo)表的影響。
ETL工具的功能之十:日志和審計(jì)
數(shù)據(jù)倉庫的目的就是要提供一個準(zhǔn)確的信息源,因此數(shù)據(jù)倉庫里的數(shù)據(jù)應(yīng)該是可靠的、可信任的。為了保證這陣可靠性,同時保證可以記錄下所有的數(shù)據(jù)轉(zhuǎn)換操作,ETL工具應(yīng)該提供日志和審計(jì)功能。
日志可以記錄下在轉(zhuǎn)換過程中執(zhí)行了哪些步驟,包括每個步驟開始和結(jié)束時間戳。
審計(jì)可以追蹤到對數(shù)據(jù)做的所有操作,包括讀行數(shù)、轉(zhuǎn)換行數(shù)、寫行數(shù)。






















