摘要:數(shù)據(jù)集成是把不同來源、格式和特點的數(shù)據(jù)在邏輯上或物理上有機地集中,從而為企業(yè)提供全面的數(shù)據(jù)共享,是企業(yè)商務(wù)智能、數(shù)據(jù)倉庫系統(tǒng)的重要組成部分。ETL是企業(yè)數(shù)據(jù)集成的主要解決方案。文章從ETL的概念出發(fā),簡要分析了當(dāng)前ETL中用到的一些基本技術(shù),為ETL系統(tǒng)的開發(fā)和ETL技術(shù)的應(yīng)用提供一些參考。
1.ETL簡介
隨著企業(yè)信息化建設(shè)的發(fā)展,巨大的投資為企業(yè)建立了眾多的信息系統(tǒng),以幫助企業(yè)進行內(nèi)外部業(yè)務(wù)的處理和管理工作。但是隨著信息系統(tǒng)的增加,各自孤立工作的信息系統(tǒng)將會造成大量的冗余數(shù)據(jù)和業(yè)務(wù)人員的重復(fù)勞動。企業(yè)應(yīng)用集成(EAI,Enterprise Application Integration)應(yīng)運而生。EAI通過建立底層數(shù)據(jù)交換平臺來聯(lián)系橫貫整個企業(yè)的異構(gòu)系統(tǒng)、應(yīng)用、數(shù)據(jù)源等,完成在企業(yè)內(nèi)部的ERP、CRM、SCM、數(shù)據(jù)庫、數(shù)據(jù)倉庫,以及其它重要的內(nèi)部系統(tǒng)之間無縫地共享和交換數(shù)據(jù)的需要。數(shù)據(jù)集成是企業(yè)應(yīng)用集成的重要環(huán)節(jié),企業(yè)實現(xiàn)數(shù)據(jù)集成,可以使更多的人更充分地使用已有數(shù)據(jù)資源,減少資料收集、數(shù)據(jù)采集等重復(fù)勞動和相應(yīng)費用。
但是,在實施數(shù)據(jù)集成的過程中,由于不同用戶提供的數(shù)據(jù)可能來自不同的途徑,其數(shù)據(jù)內(nèi)容、數(shù)據(jù)格式和數(shù)據(jù)質(zhì)量千差萬別,有時甚至?xí)龅綌?shù)據(jù)格式不能轉(zhuǎn)換或數(shù)據(jù)轉(zhuǎn)換格式后丟失信息等棘手問題,嚴(yán)重阻礙了數(shù)據(jù)在各部門和各應(yīng)用系統(tǒng)中的流動與共享。因此,如何對數(shù)據(jù)進行有效的集成管理已成為增強企業(yè)商業(yè)競爭力的必然選擇。ETL是實現(xiàn)數(shù)據(jù)集成的主要技術(shù)。
ETL中三個字母分別代表的是Extract、Transform、Load,即抽取、轉(zhuǎn)換、加載。(1)數(shù)據(jù)抽取:從源數(shù)據(jù)源系統(tǒng)抽取目的數(shù)據(jù)源系統(tǒng)需要的數(shù)據(jù);(2)數(shù)據(jù)轉(zhuǎn)換:將從源數(shù)據(jù)源獲取的數(shù)據(jù)按照業(yè)務(wù)需求,轉(zhuǎn)換成目的數(shù)據(jù)源要求的形式,并對錯誤、不一致的數(shù)據(jù)進行清洗和加工。(3)數(shù)據(jù)加載:將轉(zhuǎn)換后的數(shù)據(jù)裝載到目的數(shù)據(jù)源。
ETL原本是作為構(gòu)建數(shù)據(jù)倉庫的一個環(huán)節(jié),負責(zé)將分布的、異構(gòu)數(shù)據(jù)源中的數(shù)據(jù)如關(guān)系數(shù)據(jù)、平面數(shù)據(jù)文件等抽取到臨時中間層后進行清洗、轉(zhuǎn)換、集成,最后加載到數(shù)據(jù)倉庫或數(shù)據(jù)集市中,成為聯(lián)機分析處理、數(shù)據(jù)挖掘的基礎(chǔ)?,F(xiàn)在也越來越多地將ETL應(yīng)用于一般信息系統(tǒng)中數(shù)據(jù)的遷移、交換和同步。一個簡單的ETL體系結(jié)構(gòu)如圖1.1所示。
2.ETL中的關(guān)鍵技術(shù)
ETL過程中的主要環(huán)節(jié)就是數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換和加工、數(shù)據(jù)裝載。為了實現(xiàn)這些功能,各個ETL工具一般會進行一些功能上的擴充,例如工作流、調(diào)度引擎、規(guī)則引擎、腳本支持、統(tǒng)計信息等。
2.1 數(shù)據(jù)抽取
數(shù)據(jù)抽取是從數(shù)據(jù)源中抽取數(shù)據(jù)的過程。實際應(yīng)用中,數(shù)據(jù)源較多采用的是關(guān)系數(shù)據(jù)庫。從數(shù)據(jù)庫中抽取數(shù)據(jù)一般有以下幾種方式。
(1)全量抽取
全量抽取類似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,它將數(shù)據(jù)源中的表或視圖的數(shù)據(jù)原封不動的從數(shù)據(jù)庫中抽取出來,并轉(zhuǎn)換成自己的ETL工具可以識別的格式。全量抽取比較簡單。
(2)增量抽取
增量抽取只抽取自上次抽取以來數(shù)據(jù)庫中要抽取的表中新增或修改的數(shù)據(jù)。在ETL使用過程中。增量抽取較全量抽取應(yīng)用更廣。如何捕獲變化的數(shù)據(jù)是增量抽取的關(guān)鍵。對捕獲方法一般有兩點要求:準(zhǔn)確性,能夠?qū)I(yè)務(wù)系統(tǒng)中的變化數(shù)據(jù)按一定的頻率準(zhǔn)確地捕獲到;性能,不能對業(yè)務(wù)系統(tǒng)造成太大的壓力,影響現(xiàn)有業(yè)務(wù)。目前增量數(shù)據(jù)抽取中常用的捕獲變化數(shù)據(jù)的方法有:
a.觸發(fā)器:在要抽取的表上建立需要的觸發(fā)器,一般要建立插入、修改、刪除三個觸發(fā)器,每當(dāng)源表中的數(shù)據(jù)發(fā)生變化,就被相應(yīng)的觸發(fā)器將變化的數(shù)據(jù)寫入一個臨時表,抽取線程從臨時表中抽取數(shù)據(jù),臨時表中抽取過的數(shù)據(jù)被標(biāo)記或刪除。觸發(fā)器方式的優(yōu)點是數(shù)據(jù)抽取的性能較高,缺點是要求業(yè)務(wù)表建立觸發(fā)器,對業(yè)務(wù)系統(tǒng)有一定的影響。
d.日志對比:通過分析數(shù)據(jù)庫自身的日志來判斷變化的數(shù)據(jù)。Oracle的改變數(shù)據(jù)捕獲(CDC,Changed Data Capture)技術(shù)是這方面的代表。CDC 特性是在Oracle9i數(shù)據(jù)庫中引入的。CDC能夠幫助你識別從上次抽取之后發(fā)生變化的數(shù)據(jù)。利用CDC,在對源表進行insert、update或 delete等操作的同時就可以提取數(shù)據(jù),并且變化的數(shù)據(jù)被保存在數(shù)據(jù)庫的變化表中。這樣就可以捕獲發(fā)生變化的數(shù)據(jù),然后利用數(shù)據(jù)庫視圖以一種可控的方式提供給目標(biāo)系統(tǒng)。CDC體系結(jié)構(gòu)基于發(fā)布者/訂閱者模型。發(fā)布者捕捉變化數(shù)據(jù)并提供給訂閱者。訂閱者使用從發(fā)布者那里獲得的變化數(shù)據(jù)。通常,CDC系統(tǒng)擁有一個發(fā)布者和多個訂閱者。發(fā)布者首先需要識別捕獲變化數(shù)據(jù)所需的源表。然后,它捕捉變化的數(shù)據(jù)并將其保存在特別創(chuàng)建的變化表中。它還使訂閱者能夠控制對變化數(shù)據(jù)的訪問。訂閱者需要清楚自己感興趣的是哪些變化數(shù)據(jù)。一個訂閱者可能不會對發(fā)布者發(fā)布的所有數(shù)據(jù)都感興趣。訂閱者需要創(chuàng)建一個訂閱者視圖來訪問經(jīng)發(fā)布者授權(quán)可以訪問的變化數(shù)據(jù)。CDC分為同步模式和異步模式,同步模式實時的捕獲變化數(shù)據(jù)并存儲到變化表中,發(fā)布者與訂閱都位于同一數(shù)據(jù)庫中。異步模式則是基于Oracle的流復(fù)制技術(shù)。
ETL處理的數(shù)據(jù)源除了關(guān)系數(shù)據(jù)庫外,還可能是文件,例如txt文件、excel文件、xml文件等。對文件數(shù)據(jù)的抽取一般是進行全量抽取,一次抽取前可保存文件的時間戳或計算文件的MD5校驗碼,下次抽取時進行比對,如果相同則可忽略本次抽取。
2.2 數(shù)據(jù)轉(zhuǎn)換和加工
從數(shù)據(jù)源中抽取的數(shù)據(jù)不一定完全滿足目的庫的要求,例如數(shù)據(jù)格式的不一致、數(shù)據(jù)輸入錯誤、數(shù)據(jù)不完整等等,因此有必要對抽取出的數(shù)據(jù)進行數(shù)據(jù)轉(zhuǎn)換和加工。
數(shù)據(jù)的轉(zhuǎn)換和加工可以在ETL引擎中進行,也可以在數(shù)據(jù)抽取過程中利用關(guān)系數(shù)據(jù)庫的特性同時進行。
(1)ETL引擎中的數(shù)據(jù)轉(zhuǎn)換和加工
ETL引擎中一般以組件化的方式實現(xiàn)數(shù)據(jù)轉(zhuǎn)換。常用的數(shù)據(jù)轉(zhuǎn)換組件有字段映射、數(shù)據(jù)過濾、數(shù)據(jù)清洗、數(shù)據(jù)替換、數(shù)據(jù)計算、數(shù)據(jù)驗證、數(shù)據(jù)加解密、數(shù)據(jù)合并、數(shù)據(jù)拆分等。這些組件如同一條流水線上的一道道工序,它們是可插拔的,且可以任意組裝,各組件之間通過數(shù)據(jù)總線共享數(shù)據(jù)。
有些ETL工具還提供了腳本支持,使得用戶可以以一種編程的方式定制數(shù)據(jù)的轉(zhuǎn)換和加工行為。
(2)在數(shù)據(jù)庫中進行數(shù)據(jù)加工
關(guān)系數(shù)據(jù)庫本身已經(jīng)提供了強大的SQL、函數(shù)來支持數(shù)據(jù)的加工,如在SQL查詢語句中添加where條件進行過濾,查詢中重命名字段名與目的表進行映射,substr函數(shù),case條件判斷等等。下面是一個SQL查詢的例子。
select ID as USERID, substr(TITLE, 1, 20) as TITLE, case when REMARK is null then ' ' else REMARK end as CONTENT from TB_REMARK where ID > 100; |
相比在ETL引擎中進行數(shù)據(jù)轉(zhuǎn)換和加工,直接在SQL語句中進行轉(zhuǎn)換和加工更加簡單清晰,性能更高。對于SQL語句無法處理的可以交由ETL引擎處理。
2.3 數(shù)據(jù)裝載
將轉(zhuǎn)換和加工后的數(shù)據(jù)裝載到目的庫中通常是ETL過程的最后步驟。裝載數(shù)據(jù)的最佳方法取決于所執(zhí)行操作的類型以及需要裝入多少數(shù)據(jù)。當(dāng)目的庫是關(guān)系數(shù)據(jù)庫時,一般來說有兩種裝載方式:
(1)直接SQL語句進行insert、update、delete操作。
(2)采用批量裝載方法,如bcp、bulk、關(guān)系數(shù)據(jù)庫特有的批量裝載工具或api。
大多數(shù)情況下會使用第一種方法,因為它們進行了日志記錄并且是可恢復(fù)的。但是,批量裝載操作易于使用,并且在裝入大量數(shù)據(jù)時效率較高。使用哪種數(shù)據(jù)裝載方法取決于業(yè)務(wù)系統(tǒng)的需要。
3.主流ETL工具
ETL工具從廠商來看分為兩種,一種是數(shù)據(jù)庫廠商自帶的ETL工具,如Oracle warehouse builder、Oracle Data Integrator。另外一種是第三方工具提供商,如Kettle。開源世界也有很多的ETL工具,功能各異,強弱不一。
(1)Oracle Data Integrator(ODI)
ODI前身是Sunopsis Active Integration Platform,在2006年底被Oracle收購,重新命名為Oracle Data Integrator,主要定位于在ETL和數(shù)據(jù)集成的場景里使用。ODI和Oracle原來的ETL工具OWB相比有一些顯著的特點,比如和OWB一樣是ELT架構(gòu),但是比OWB支持更多的異構(gòu)的數(shù)據(jù)源,ODI提供了call web service的機制,并且ODI的接口也可以暴露為web service,從而可以和SOA環(huán)境進行交互。ODI能夠檢測事件,一個事件可以觸發(fā)ODI的一個接口流程,從而完成近乎實時的數(shù)據(jù)集成。
ODI的主要功能特點有:
a.使用CDC作為變更數(shù)據(jù)捕獲的捕獲方式。
b.代理支持并行處理和負載均衡。
c.完善的權(quán)限控制、版本管理功能。
d.支持數(shù)據(jù)質(zhì)量檢查,清洗和回收臟數(shù)據(jù)。
e.支持與JMS消息中間件集成。
f.支持Web Service。
(2)SQL Server Integration Services(SSIS)
SSIS是SQL Server 2005的新成員,在SQL Server的早期版本中,其實就已經(jīng)有了它的雛形,那時的名稱叫做數(shù)據(jù)轉(zhuǎn)換服務(wù)(DTS)。在SQL Server 2005的前兩個版本SQL Server 7.0和SQL Server 2000中,DTS主要集中于提取和加載。通過使用DTS,可以從任何數(shù)據(jù)源中提取數(shù)據(jù)以及將數(shù)據(jù)加載到任何數(shù)據(jù)源中。在SQL Server 2005中,對DTS進行了重新設(shè)計和改進形成了SSIS。SSIS提供了數(shù)據(jù)相關(guān)的控制流、數(shù)據(jù)流、日志、變量、event、連接管理等基礎(chǔ)設(shè)施??刂屏饕卜Q為工作流或者任務(wù)流,它更像工作流,在工作流中每個組件都是一個任務(wù)。這些任務(wù)是按預(yù)定義的順序執(zhí)行的。在任務(wù)流中可能有分支。當(dāng)前任務(wù)的執(zhí)行結(jié)果決定沿哪條分支前進。數(shù)據(jù)流是新的概念。數(shù)據(jù)流也稱為流水線,主要解決數(shù)據(jù)轉(zhuǎn)換的問題。數(shù)據(jù)流由一組預(yù)定義的轉(zhuǎn)換操作組成。數(shù)據(jù)流的起點通常是數(shù)據(jù)源(源表);數(shù)據(jù)流的終點通常是數(shù)據(jù)的目的地(目標(biāo)表)??梢詫?shù)據(jù)流的執(zhí)行認為是一個流水線的過程,在該過程中,每一行數(shù)據(jù)都是裝配線中需要處理的零件,而每一個轉(zhuǎn)換都是裝配線中的處理單元。 4.ETL工具的選擇
在數(shù)據(jù)集成中該如何選擇ETL工具呢?一般來說需要考慮以下幾個方面:
(1)對平臺的支持程度。
(2)對數(shù)據(jù)源的支持程度。
(3)抽取和裝載的性能是不是較高,且對業(yè)務(wù)系統(tǒng)的性能影響大不大,傾入性高不高。
(4)數(shù)據(jù)轉(zhuǎn)換和加工的功能強不強。
(5)是否具有管理和調(diào)度功能。
(6)是否具有良好的集成性和開放性。
參考文獻
[1]張寧,賈自艷,史忠植。數(shù)據(jù)倉庫中ETL 技術(shù)的研究。計算機工程與應(yīng)用,2002(24)。
[2]王詠梅。ETL及其在數(shù)據(jù)倉庫創(chuàng)建中的重要作用。
[3] Kamal Hathi。SQL Server 2005集成服務(wù)簡介。