深入瞭解當前ETL中用到的一些基本技術

數據集成是把不同來源、格式和特點的數據在邏輯上或物理上有機地集中,從而爲企業提供全面的數據共享,是企業商務智能、數據倉庫系統的重要組成部分。ETL是企業數據集成的饕餼齜槳浮N惱麓覧TL的概念出發,簡要分析了當前ETL中用到的一些基本技術,爲ETL系統的開發和ETL技術的應用提供一些參考。

1.ETL簡介

隨着企業信息化建設的發展,巨大的投資爲企業建立了衆多的信息系統,以幫助企業進行內外部業務的處理和管理工作。但是隨着信息系統的增加,各自孤立工作的信息系統將會造成大量的冗餘數據和業務人員的重複勞動。企業應用集成(EAI,Enterprise Application Integration)應運而生。EAI通過建立底層數據交換平臺來聯繫橫貫整個企業的異構系統、應用、數據源等,完成在企業內部的ERP、CRM、SCM、數據庫、數據倉庫,以及其它重要的內部系統之間無縫地共享和交換數據的需要。數據集成是企業應用集成的重要環節,企業實現數據集成,可以使更多的人更充分地使用已有數據資源,減少資料收集、數據採集等重複勞動和相應費用。

但是,在實施數據集成的過程中,由於不同用戶提供的數據可能來自不同的途徑,其數據內容、數據格式和數據質量千差萬別,有時甚至會遇到數據格式不能轉換或數據轉換格式後丟失信息等棘手問題,嚴重阻礙了數據在各部門和各應用系統中的流動與共享。因此,如何對數據進行有效的集成管理已成爲增強企業商業競爭力的必然選擇。ETL是實現數據集成的主要技術。

ETL中三個字母分別代表的是Extract、Transform、Load,即抽取、轉換、加載。(1)數據抽取:從源數據源系統抽取目的數據源系統需要的數據;(2)數據轉換:將從源數據源獲取的數據按照業務需求,轉換成目的數據源要求的形式,並對錯誤、不一致的數據進行清洗和加工。(3)數據加載:將轉換後的數據裝載到目的數據源。

ETL原本是作爲構建數據倉庫的一個環節,負責將分佈的、異構數據源中的數據如關係數據、平面數據文件等抽取到臨時中間層後進行清洗、轉換、集成,最後加載到數據倉庫或數據集市中,成爲聯機分析處理、數據挖掘的基礎。現在也越來越多地將ETL應用於一般信息系統中數據的遷移、交換和同步。一個簡單的ETL體系結構如圖1.1所示。


1447609.jpg



2.ETL中的關鍵技術

ETL過程中的主要環節就是數據抽取、數據轉換和加工、數據裝載。爲了實現這些功能,各個ETL工具一般會進行一些功能上的擴充,例如工作流、調度引擎、規則引擎、腳本支持、統計信息等。

2.1 數據抽取

數據抽取是從數據源中抽取數據的過程。實際應用中,數據源較多采用的是關係數據庫。從數據庫中抽取數據一般有以下幾種方式。

(1)全量抽取

全量抽取類似於數據遷移或數據複製,它將數據源中的表或視圖的數據原封不動的從數據庫中抽取出來,並轉換成自己的ETL工具可以識別的格式。全量抽取比較簡單。

(2)增量抽取

增量抽取只抽取自上次抽取以來數據庫中要抽取的表中新增或修改的數據。在ETL使用過程中。增量抽取較全量抽取應用更廣。如何捕獲變化的數據是增量抽取的關鍵。對捕獲方法一般有兩點要求:準確性,能夠將業務系統中的變化數據按一定的頻率準確地捕獲到;性能,不能對業務系統造成太大的壓力,影響現有業務。目前增量數據抽取中常用的捕獲變化數據的方法有:

a.觸發器:在要抽取的表上建立需要的觸發器,一般要建立插入、修改、刪除三個觸發器,每當源表中的數據發生變化,就被相應的觸發器將變化的數據寫入一個臨時表,抽取線程從臨時表中抽取數據,臨時表中抽取過的數據被標記或刪除。觸發器方式的優點是數據抽取的性能較高,缺點是要求業務表建立觸發器,對業務系統有一定的影響。

b.時間戳:它是一種基於快照比較的變化數據捕獲方式,在源表上增加一個時間戳字段,系統中更新修改表數據的時候,同時修改時間戳字段的值。當進行數據抽取時,通過比較系統時間與時間戳字段的值來決定抽取哪些數據。有的數據庫的時間戳支持自動更新,即表的其它字段的數據發生改變時,自動更新時間戳字段的值。有的數據庫不支持時間戳的自動更新,這就要求業務系統在更新業務數據時,手工更新時間戳字段。同觸發器方式一樣,時間戳方式的性能也比較好,數據抽取相對清楚簡單,但對業務系統也有很大的傾入性(加入額外的時間戳字段),特別是對不支持時間戳的自動更新的數據庫,還要求業務系統進行額外的更新時間戳操作。另外,無法捕獲對時間戳以前數據的delete和update操作,在數據準確性上受到了一定的限制。

c.全表比對:典型的全表比對的方式是採用MD5校驗碼。ETL工具事先爲要抽取的表建立一個結構類似的MD5臨時表,該臨時表記錄源表主鍵以及根據所有字段的數據計算出來的MD5校驗碼。每次進行數據抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,從而決定源表中的數據是新增、修改還是刪除,同時更新MD5校驗碼。MD5方式的優點是對源系統的傾入性較小(僅需要建立一個MD5臨時表),但缺點也是顯而易見的,與觸發器和時間戳方式中的主動通知不同,MD5方式是被動的進行全表數據的比對,性能較差。當表中沒有主鍵或唯一列且含有重複記錄時,MD5方式的準確性較差。

d.日誌對比:通過分析數據庫自身的日誌來判斷變化的數據。Oracle的改變數據捕獲(CDC,Changed Data Capture)技術是這方面的代表。CDC 特性是在Oracle9i數據庫中引入的。CDC能夠幫助你識別從上次抽取之後發生變化的數據。利用CDC,在對源表進行insert、update或 delete等操作的同時就可以提取數據,並且變化的數據被保存在數據庫的變化表中。這樣就可以捕獲發生變化的數據,然後利用數據庫視圖以一種可控的方式提供給目標系統。CDC體系結構基於發佈者/訂閱者模型。發佈者捕捉變化數據並提供給訂閱者。訂閱者使用從發佈者那裏獲得的變化數據。通常,CDC系統擁有一個發佈者和多個訂閱者。發佈者首先需要識別捕獲變化數據所需的源表。然後,它捕捉變化的數據並將其保存在特別創建的變化表中。它還使訂閱者能夠控制對變化數據的訪問。訂閱者需要清楚自己感興趣的是哪些變化數據。一個訂閱者可能不會對發佈者發佈的所有數據都感興趣。訂閱者需要創建一個訂閱者視圖來訪問經發布者授權可以訪問的變化數據。CDC分爲同步模式和異步模式,同步模式實時的捕獲變化數據並存儲到變化表中,發佈者與訂閱都位於同一數據庫中。異步模式則是基於Oracle的流複製技術。

ETL處理的數據源除了關係數據庫外,還可能是文件,例如txt文件、excel文件、xml文件等。對文件數據的抽取一般是進行全量抽取,一次抽取前可保存文件的時間戳或計算文件的MD5校驗碼,下次抽取時進行比對,如果相同則可忽略本次抽取。

2.2 數據轉換和加工

從數據源中抽取的數據不一定完全滿足目的庫的要求,例如數據格式的不一致、數據輸入錯誤、數據不完整等等,因此有必要對抽取出的數據進行數據轉換和加工。

數據的轉換和加工可以在ETL引擎中進行,也可以在數據抽取過程中利用關係數據庫的特性同時進行。

(1)ETL引擎中的數據轉換和加工

ETL引擎中一般以組件化的方式實現數據轉換。常用的數據轉換組件有字段映射、數據過濾、數據清洗、數據替換、數據計算、數據驗證、數據加解密、數據合併、數據拆分等。這些組件如同一條流水線上的一道道工序,它們是可插拔的,且可以任意組裝,各組件之間通過數據總線共享數據。

有些ETL工具還提供了腳本支持,使得用戶可以以一種編程的方式定製數據的轉換和加工行爲。

(2)在數據庫中進行數據加工

關係數據庫本身已經提供了強大的SQL、函數來支持數據的加工,如在SQL查詢語句中添加where條件進行過濾,查詢中重命名字段名與目的表進行映射,substr函數,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引擎中進行數據轉換和加工,直接在SQL語句中進行轉換和加工更加簡單清晰,性能更高。對於SQL語句無法處理的可以交由ETL引擎處理。

2.3 數據裝載

將轉換和加工後的數據裝載到目的庫中通常是ETL過程的最後步驟。裝載數據的最佳方法取決於所執行操作的類型以及需要裝入多少數據。當目的庫是關係數據庫時,一般來說有兩種裝載方式:

(1)直接SQL語句進行insert、update、delete操作。

(2)採用批量裝載方法,如bcp、bulk、關係數據庫特有的批量裝載工具或api。

大多數情況下會使用第一種方法,因爲它們進行了日誌記錄並且是可恢復的。但是,批量裝載操作易於使用,並且在裝入大量數據時效率較高。使用哪種數據裝載方法取決於業務系統的需要。

3.主流ETL工具

ETL工具從廠商來看分爲兩種,一種是數據庫廠商自帶的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和數據集成的場景裏使用。ODI和Oracle原來的ETL工具OWB相比有一些顯著的特點,比如和OWB一樣是ELT架構,但是比OWB支持更多的異構的數據源,ODI提供了call web service的機制,並且ODI的接口也可以暴露爲web service,從而可以和SOA環境進行交互。ODI能夠檢測事件,一個事件可以觸發ODI的一個接口流程,從而完成近乎實時的數據集成。

ODI的主要功能特點有:

a.使用CDC作爲變更數據捕獲的捕獲方式。

b.代理支持並行處理和負載均衡。

c.完善的權限控制、版本管理功能。

d.支持數據質量檢查,清洗和回收髒數據。

e.支持與JMS消息中間件集成。

f.支持Web Service。

(2)SQL Server Integration Services(SSIS)

SSIS是SQL Server 2005的新成員,在SQL Server的早期版本中,其實就已經有了它的雛形,那時的名稱叫做數據轉換服務(DTS)。在SQL Server 2005的前兩個版本SQL Server 7.0和SQL Server 2000中,DTS主要集中於提取和加載。通過使用DTS,可以從任何數據源中提取數據以及將數據加載到任何數據源中。在SQL Server 2005中,對DTS進行了重新設計和改進形成了SSIS。SSIS提供了數據相關的控制流、數據流、日誌、變量、event、連接管理等基礎設施。控制流也稱爲工作流或者任務流,它更像工作流,在工作流中每個組件都是一個任務。這些任務是按預定義的順序執行的。在任務流中可能有分支。當前任務的執行結果決定沿哪條分支前進。數據流是新的概念。數據流也稱爲流水線,主要解決數據轉換的問題。數據流由一組預定義的轉換操作組成。數據流的起點通常是數據源(源表);數據流的終點通常是數據的目的地(目標表)。可以將數據流的執行認爲是一個流水線的過程,在該過程中,每一行數據都是裝配線中需要處理的零件,而每一個轉換都是裝配線中的處理單元。SSIS的體系結構如圖3.1所示。


1447607.jpg


圖3.1 SSIS體系結構圖


4.ETL工具的選擇

在數據集成中該如何選擇ETL工具呢?一般來說需要考慮以下幾個方面:

(1)對平臺的支持程度。

(2)對數據源的支持程度。

(3)抽取和裝載的性能是不是較高,且對業務系統的性能影響大不大,傾入性高不高。

(4)數據轉換和加工的功能強不強。

(5)是否具有管理和調度功能。

(6)是否具有良好的集成性和開放性。

(責任編輯:盧兆林)


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