不多說(shuō),直接上干貨!
大家會(huì)有一個(gè)疑惑,本系列博客是Kettle,那怎么扯上ETL呢? Kettle是一款國(guó)外開(kāi)源的ETL工具,純java編寫(xiě),可以在Window、Linux、Unix上運(yùn)行。
說(shuō)白了就是,很有必要去理解一般ETL工具必備的特性和功能,這樣才更好的掌握Kettle的使用。我這里啊,先描述ETL工具的通用功能,再來(lái)描述作為ETL工具其中的一種(Kettle)是如何來(lái)提供這些功能的(圖文詳解)
ETL工具的功能之一:連接 任何ETL工具都應(yīng)該有能力連接到類(lèi)型廣泛的數(shù)據(jù)源和數(shù)據(jù)格式。對(duì)于最常用的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),還要提供本地的連接方式(如對(duì)于Oracle的OCI),ETL應(yīng)該能提供下面最基本的功能: ?。?)連接到普通關(guān)系型數(shù)據(jù)庫(kù)并獲取數(shù)據(jù),如常見(jiàn)的Orcal、MS SQL Server、IBM DB/2、Ingres、MySQL和PostgreSQL。還有很多很多 ?。?)從有分隔符和固定格式的ASCII文件中獲取數(shù)據(jù) ?。?)從XML文件中獲取數(shù)據(jù) ?。?)從流行的辦公軟件中獲取數(shù)據(jù),如Access數(shù)據(jù)庫(kù)和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)的連接。 (7)還能提供Salesforce.com和SAP/R3的輸入步驟,但不是套件內(nèi),需要額外安裝。對(duì)于其他ERP和財(cái)務(wù)系統(tǒng)的數(shù)據(jù)抽取還需要其他解決方案。當(dāng)然,最通用的方法就是要求這些系統(tǒng)導(dǎo)出文本格式的數(shù)據(jù),將文本數(shù)據(jù)作為數(shù)據(jù)源。
ETL工具的功能之二:平臺(tái)獨(dú)立 一個(gè)ETL工具應(yīng)該能在任何平臺(tái)下甚至是不同平臺(tái)的組合上運(yùn)行。一個(gè)32位的操作系統(tǒng)可能在開(kāi)發(fā)的初始階段運(yùn)行很好,但是當(dāng)數(shù)據(jù)量越來(lái)越大時(shí),就需要一個(gè)更強(qiáng)大的操作系統(tǒng)。另一種情況,開(kāi)發(fā)一般是在Windows或 Mac機(jī)上運(yùn)行的。而生產(chǎn)環(huán)境一般是Linux系統(tǒng)或集群,你的ETL解決方案應(yīng)該可以無(wú)縫地在這些系統(tǒng)間切換。
ETL工具的功能之三:數(shù)據(jù)規(guī)模 一般ETL能通過(guò)下面的3種方式來(lái)處理大數(shù)據(jù)。 并發(fā):ETL過(guò)程能夠同時(shí)處理多個(gè)數(shù)據(jù)流,以便利用現(xiàn)代多核的硬件架構(gòu)。 分區(qū):ETL能夠使用特定的分區(qū)模式,將數(shù)據(jù)分發(fā)到并發(fā)的數(shù)據(jù)流中。 集群:ETL過(guò)程能夠分配在多臺(tái)機(jī)器上聯(lián)合完成。
Kettle是基于Java的解決方案,可以運(yùn)行在任何安裝了Java虛擬機(jī)的計(jì)算機(jī)上(包括Windows、Linux和Mac)。轉(zhuǎn)換里的每個(gè)步驟都是以并發(fā)的方式來(lái)執(zhí)行,并且可以執(zhí)行多次,這樣加快了處理速度。 Kettle在運(yùn)行轉(zhuǎn)換時(shí),根據(jù)用戶(hù)的設(shè)置,可以將數(shù)據(jù)以不同的方式發(fā)送到多個(gè)數(shù)據(jù)流中(有兩種幾本發(fā)送方式:分發(fā)和復(fù)制)。分發(fā)類(lèi)似與分發(fā)撲克牌,以輪流的方式將每行數(shù)據(jù)只發(fā)給一個(gè)數(shù)據(jù)流,復(fù)制是將每行數(shù)據(jù)發(fā)給所有數(shù)據(jù)流。 為了更精確控制數(shù)據(jù),Kettle還使用了分區(qū)模式,通過(guò)分區(qū)可以將同一特征的數(shù)據(jù)發(fā)送到同一個(gè)數(shù)據(jù)流。這里的分區(qū)只是概念上類(lèi)似于數(shù)據(jù)庫(kù)的分區(qū)。 Kettle并沒(méi)有針對(duì)數(shù)據(jù)庫(kù)分區(qū)有什么功能。 至于Kettle的擴(kuò)展集群,這個(gè)很簡(jiǎn)單理解,不多贅述。
ETL工具的功能之四:設(shè)計(jì)靈活性 一個(gè)ETL工具應(yīng)該留給開(kāi)發(fā)人員足夠的自由度來(lái)使用,而不能通過(guò)一種固定的方式來(lái)限制用戶(hù)的創(chuàng)造力和設(shè)計(jì)的需求。ETL工具可以分為基于過(guò)程的和基于映射的。 基于映射的功能只在源數(shù)據(jù)和目的數(shù)據(jù)之間提供了一組固定的步驟,嚴(yán)重限制了設(shè)計(jì)工作的自由度?;谟成涞墓ぞ咭话阋子谑褂?,可快速上手,但是對(duì)于更復(fù)雜的任務(wù),基于過(guò)程的工具才是組好的選擇。 使用Kettle這樣基于過(guò)程的工具,根據(jù)實(shí)際的數(shù)據(jù)和也許需求,可以創(chuàng)建自定義的步驟和轉(zhuǎn)換。
ETL工具的功能之五:復(fù)用性 設(shè)計(jì)完的ETL轉(zhuǎn)換應(yīng)該可以被復(fù)用,這是非常重要的。復(fù)制和粘貼已經(jīng)存在的轉(zhuǎn)換步驟是最常見(jiàn)的一種復(fù)用,但這不是真正意義上的復(fù)用。 Kettle里有一個(gè)映射(子轉(zhuǎn)換)步驟,可以完成轉(zhuǎn)換的復(fù)用,該步驟可以將一個(gè)轉(zhuǎn)換作為其他轉(zhuǎn)換的子轉(zhuǎn)換。另外轉(zhuǎn)換還可以在多個(gè)作業(yè)里多次使用,同樣作業(yè)也可以為其他作業(yè)的子作業(yè)。
ETL工具的功能之六:擴(kuò)展性 大家都知道,幾乎所有的ETL工具都提供了腳本,以編程的方式來(lái)解決工具本身不能解決的問(wèn)題。另外,還有少數(shù)幾款ETL工具可以通過(guò)API或其他方式為工具增加組件。使用腳本語(yǔ)言寫(xiě)函數(shù),函數(shù)可以被其他轉(zhuǎn)換或腳本調(diào)用。 Kettle提供了上述的所有功能。Java腳本步驟可以用來(lái)開(kāi)發(fā)Java腳本,把這個(gè)腳本保存為一個(gè)轉(zhuǎn)換,再通過(guò)映射(子轉(zhuǎn)換)步驟,又可以變?yōu)橐粋€(gè)標(biāo)準(zhǔn)的可以復(fù)用的函數(shù)。實(shí)際上,并不限于腳本,每個(gè)轉(zhuǎn)換都可以通過(guò)這種映射(子轉(zhuǎn)換)方式來(lái)復(fù)用,如同創(chuàng)建了一個(gè)組件。Kettle在設(shè)計(jì)上就是可擴(kuò)展的,它提供了一個(gè)插件平臺(tái)。這種插件架構(gòu)允許第三方為Kettle平臺(tái)開(kāi)發(fā)插件。 大家要清楚,Kettle里的所有插件,即使是默認(rèn)提供的組件,實(shí)際上也都是插件。內(nèi)置的第三方插件和Pentaho插件的唯一區(qū)別就是技術(shù)支持。 假設(shè)你買(mǎi)了一個(gè)第三方插件(例如一個(gè)SugarCRM的連接),技術(shù)支持由第三方提供,而不是由Pentaho提供。
ETL工具的功能之七:數(shù)據(jù)轉(zhuǎn)換 ETL項(xiàng)目很大一部分工作都是在做數(shù)據(jù)轉(zhuǎn)換。在輸入和輸出之間,數(shù)據(jù)要經(jīng)過(guò)校驗(yàn)、連接、分隔、合并、轉(zhuǎn)置、排序、合并、克隆、排重、過(guò)濾、刪除、替換或者其他操作。在不同機(jī)構(gòu)、項(xiàng)目和解決方案里,數(shù)據(jù)轉(zhuǎn)換的需求都大不相同,所以很難說(shuō)清一個(gè)ETL工具最少應(yīng)該提供哪些轉(zhuǎn)換功能。但是呢,常用的ETL工具(包括Kettle)都提供了下面一些最基本的整合功能: 緩慢變更維度 查詢(xún)值 行列轉(zhuǎn)換 條件分隔 排序、合并、連接 聚集
ETL工具的功能之八:測(cè)試和調(diào)試 這個(gè)很簡(jiǎn)單,不多贅述,后續(xù)博客有實(shí)戰(zhàn)。
ETL工具的功能之九:血統(tǒng)分析和影響分析 任何ETL工具都應(yīng)該有一個(gè)重要的功能:讀取轉(zhuǎn)換的元數(shù)據(jù),它是提取由不同轉(zhuǎn)換構(gòu)成的數(shù)據(jù)流的信息。 血統(tǒng)分析和影響分析是基于元數(shù)據(jù)的兩個(gè)相關(guān)的特性。 血統(tǒng)是一種回溯性的機(jī)制,它可以查看到數(shù)據(jù)的來(lái)源。 影響分析是基于元數(shù)據(jù)的另一種分析方法,可以分析源數(shù)據(jù)對(duì)隨后的轉(zhuǎn)換以及目標(biāo)表的影響。
ETL工具的功能之十:日志和審計(jì) 數(shù)據(jù)倉(cāng)庫(kù)的目的就是要提供一個(gè)準(zhǔn)確的信息源,因此數(shù)據(jù)倉(cāng)庫(kù)里的數(shù)據(jù)應(yīng)該是可靠的、可信任的。為了保證這陣可靠性,同時(shí)保證可以記錄下所有的數(shù)據(jù)轉(zhuǎn)換操作,ETL工具應(yīng)該提供日志和審計(jì)功能。 日志可以記錄下在轉(zhuǎn)換過(guò)程中執(zhí)行了哪些步驟,包括每個(gè)步驟開(kāi)始和結(jié)束時(shí)間戳。 審計(jì)可以追蹤到對(duì)數(shù)據(jù)做的所有操作,包括讀行數(shù)、轉(zhuǎn)換行數(shù)、寫(xiě)行數(shù)。
更多深入,見(jiàn)這套系列博客。 |
|
來(lái)自: 遠(yuǎn)方 > 《信息技術(shù)》