ETL(Extract/Transformation/Load)是BI/DW的核心和靈魂,按照統(tǒng)一的規(guī)則集成并提高數(shù)據(jù)的價值,是負責(zé)完成數(shù)據(jù)從數(shù)據(jù)源向目標數(shù)據(jù)倉庫轉(zhuǎn)化的過程,是實施數(shù)據(jù)倉庫的重要步驟。
ETL過程中的主要環(huán)節(jié)就是數(shù)據(jù)抽取、數(shù)據(jù)轉(zhuǎn)換和加工、數(shù)據(jù)裝載。為了實現(xiàn)這些功能,各個ETL工具一般會進行一些功能上的擴充,例如工作流、調(diào)度引擎、規(guī)則引擎、腳本支持、統(tǒng)計信息等。
數(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)鍵。對捕獲方法一般有兩點要求:準確性,能夠?qū)I(yè)務(wù)系統(tǒng)中的變化數(shù)據(jù)按一定的頻率準確地捕獲到;性能,不能對業(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ù)被標記或刪除。觸發(fā)器方式的優(yōu)點是數(shù)據(jù)抽取的性能較高,缺點是要求業(yè)務(wù)表建立觸發(fā)器,對業(yè)務(wù)系統(tǒng)有一定的影響。
b.時間戳:它是一種基于快照比較的變化數(shù)據(jù)捕獲方式,在源表上增加一個時間戳字段,系統(tǒng)中更新修改表數(shù)據(jù)的時候,同時修改時間戳字段的值。當(dāng)進行數(shù)據(jù)抽取時,通過比較系統(tǒng)時間與時間戳字段的值來決定抽取哪些數(shù)據(jù)。有的數(shù)據(jù)庫的時間戳支持自動更新,即表的其它字段的數(shù)據(jù)發(fā)生改變時,自動更新時間戳字段的值。有的數(shù)據(jù)庫不支持時間戳的自動更新,這就要求業(yè)務(wù)系統(tǒng)在更新業(yè)務(wù)數(shù)據(jù)時,手工更新時間戳字段。同觸發(fā)器方式一樣,時間戳方式的性能也比較好,數(shù)據(jù)抽取相對清楚簡單,但對業(yè)務(wù)系統(tǒng)也有很大的傾入性(加入額外的時間戳字段),特別是對不支持時間戳的自動更新的數(shù)據(jù)庫,還要求業(yè)務(wù)系統(tǒng)進行額外的更新時間戳操作。另外,無法捕獲對時間戳以前數(shù)據(jù)的delete和update操作,在數(shù)據(jù)準確性上受到了一定的限制。
c.全表比對:典型的全表比對的方式是采用md5校驗碼。ETL工具事先為要抽取的表建立一個結(jié)構(gòu)類似的MD5臨時表,該臨時表記錄源表主鍵以及根據(jù)所有字段的數(shù)據(jù)計算出來的MD5校驗碼。每次進行數(shù)據(jù)抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,從而決定源表中的數(shù)據(jù)是新增、修改還是刪除,同時更新MD5校驗碼。MD5方式的優(yōu)點是對源系統(tǒng)的傾入性較小(僅需要建立一個MD5臨時表),但缺點也是顯而易見的,與觸發(fā)器和時間戳方式中的主動通知不同,MD5方式是被動的進行全表數(shù)據(jù)的比對,性能較差。當(dāng)表中沒有主鍵或唯一列且含有重復(fù)記錄時,MD5方式的準確性較差。
d.日志對比:通過分析數(shù)據(jù)庫自身的日志來判斷變化的數(shù)據(jù)。Oracle的改變數(shù)據(jù)捕獲(CDC,ChangedDataCapture)技術(shù)是這方面的代表。CDC特性是在Oracle9i數(shù)據(jù)庫中引入的。CDC能夠幫助你識別從上次抽取之后發(fā)生變化的數(shù)據(jù)。利用CDC,在對源表進行insert、update或delete等操作的同時就可以提取數(shù)據(jù),并且變化的數(shù)據(jù)被保存在數(shù)據(jù)庫的變化表中。這樣就可以捕獲發(fā)生變化的數(shù)據(jù),然后利用數(shù)據(jù)庫視圖以一種可控的方式提供給目標系統(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校驗碼,下次抽取時進行比對,如果相同則可忽略本次抽取。
數(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條件判斷等等。
相比在ETL引擎中進行數(shù)據(jù)轉(zhuǎn)換和加工,直接在SQL語句中進行轉(zhuǎn)換和加工更加簡單清晰,性能更高。對于SQL語句無法處理的可以交由ETL引擎處理。
數(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)的需要。
常見的數(shù)據(jù)質(zhì)量問題數(shù)據(jù)質(zhì)量 | 問題 | 數(shù)據(jù)問題示例 |
格式 | 值是否按照一致的格式標準? | 電話號碼 # 可能顯示為 xxxxxxxxxx, (xxx) xxx-xxxx, 1.xxx.xxx.xxxx, 等. |
標準 | 數(shù)據(jù)元素是否一致性定義和理解 ? | 一個系統(tǒng)性別代碼 = M, F, U ,另一個系統(tǒng)性別代碼 = 0, 1, 2 |
一致性 | 值是否代表統(tǒng)一的含義? | 營業(yè)額是否總是顯示為美元還是也有可能為? |
完整性 | 是否所有必須的數(shù)據(jù)都包含? | 20% 的顧客的 last name 為空, 50% 的郵政編碼為 99999 |
精確性 | 數(shù)據(jù)是否準確地反映現(xiàn)實或可驗證的數(shù)據(jù)來源? | 供應(yīng)商顯示為‘活動’,但是其實6年前已經(jīng)和它沒有業(yè)務(wù)往來。 |
有效性 | 數(shù)據(jù)值是否在接受的范圍內(nèi)? | 薪水值應(yīng)該在 60,000-120,000 |
重復(fù)性 | 數(shù)據(jù)多次出現(xiàn) | John Ryan 和 Jack Ryan 都在系統(tǒng)中出現(xiàn)了 – 他們是同一個人嗎? |
新聞熱點
疑難解答
圖片精選