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