二、ETL 抽取方案 ETL 過程中的主要環(huán)節(jié)就是數(shù)據(jù)抽取,、數(shù)據(jù)轉(zhuǎn)換和加工,、數(shù)據(jù)裝載。為了實(shí)現(xiàn)這些功 能,,ETL 工具會進(jìn)行一些功能上的擴(kuò)充,,例如工作流、調(diào)度引擎,、規(guī)則引擎,、腳本支持、 統(tǒng)計信息等。
- 數(shù)據(jù)抽取
數(shù)據(jù)抽取是從數(shù)據(jù)源中抽取數(shù)據(jù)的過程,。實(shí)際應(yīng)用中,,數(shù)據(jù)源較多采用的是關(guān)系數(shù)據(jù)庫。 從數(shù)據(jù)庫中抽取數(shù)據(jù)一般有以下幾種方式: 2.1.1 全量抽取 全量抽取類似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,,它將數(shù)據(jù)源中的表或視圖的數(shù)據(jù)原封不動的從數(shù) 據(jù)庫中抽取出來,,并轉(zhuǎn)換成自己的ETL 工具可以識別的格式。全量抽取比較簡單,。 2.1.2 增量抽取 增量抽取只抽取自上次抽取以來數(shù)據(jù)庫中要抽取的表中新增或修改的數(shù)據(jù),。在ETL 使 用過程中,增量抽取較全量抽取應(yīng)用更廣,。如何捕獲變化的數(shù)據(jù)是增量抽取的關(guān)鍵,。對捕獲 方法一般有兩點(diǎ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ù)的方法有: 2.1.2.1 觸發(fā)器方式(又稱快照式): 在要抽取的表上建立需要的觸發(fā)器,,一般要建立插入、修改,、刪除三個觸發(fā)器,,每當(dāng)源 表中的數(shù)據(jù)發(fā)生變化,就被相應(yīng)的觸發(fā)器將變化的數(shù)據(jù)寫入一個臨時表,,抽取線程從臨時表 中抽取數(shù)據(jù),,臨時表中抽取過的數(shù)據(jù)被標(biāo)記或刪除。 優(yōu)點(diǎn):數(shù)據(jù)抽取的性能高,,ETL 加載規(guī)則簡單,,速度快,不需要修改業(yè)務(wù)系統(tǒng)表結(jié)構(gòu),, 可以實(shí)現(xiàn)數(shù)據(jù)的遞增加載,。 缺點(diǎn):要求業(yè)務(wù)表建立觸發(fā)器,對業(yè)務(wù)系統(tǒng)有一定的影響,。 2.1.2.2 時間戳方式: 它是一種基于快照比較的變化數(shù)據(jù)捕獲方式,,在源表上增加一個時間戳字段,系統(tǒng)中更 新修改表數(shù)據(jù)的時候,,同時修改時間戳字段的值,。當(dāng)進(jìn)行數(shù)據(jù)抽取時,通過比較系統(tǒng)時間與 時間戳字段的值來決定抽取哪些數(shù)據(jù),。有的數(shù)據(jù)庫的時間戳支持自動更新,,即表的其它字段 的數(shù)據(jù)發(fā)生改變時,,自動更新時間戳字段的值。有的數(shù)據(jù)庫不支持時間戳的自動更新,,這就 要求業(yè)務(wù)系統(tǒng)在更新業(yè)務(wù)數(shù)據(jù)時,,手工更新時間戳字段。 優(yōu)點(diǎn):同觸發(fā)器方式一樣,,時間戳方式的性能也比較好,,ETL 系統(tǒng)設(shè)計清晰,,源數(shù)據(jù)抽 取相對清楚簡單,,可以實(shí)現(xiàn)數(shù)據(jù)的遞增加載。 缺點(diǎn):時間戳維護(hù)需要由業(yè)務(wù)系統(tǒng)完成,,對業(yè)務(wù)系統(tǒng)也有很大的傾入性(加入額外的時 間戳字段),,特別是對不支持時間戳的自動更新的數(shù)據(jù)庫,還要求業(yè)務(wù)系統(tǒng)進(jìn)行額外的更新 時間戳操作,,工作量大,,改動面大,風(fēng)險大,;另外,,無法捕獲對時間戳以前數(shù)據(jù)的delete 和update 操作,在數(shù)據(jù)準(zhǔn)確性上受到了一定的限制,。 2.1.2.3 全表刪除插入方式 每次ETL 操作均刪除目標(biāo)表數(shù)據(jù),,由ETL 全新加載數(shù)據(jù)。 優(yōu)點(diǎn):ETL 加載規(guī)則簡單,,速度快,。 缺點(diǎn):對于維表加代理鍵不適應(yīng),當(dāng)業(yè)務(wù)系統(tǒng)產(chǎn)生刪除數(shù)據(jù)操作時,,綜合數(shù)據(jù)庫將不會 記錄到所刪除的歷史數(shù)據(jù),,不可以實(shí)現(xiàn)數(shù)據(jù)的遞增加載;同時對于目標(biāo)表所建立的關(guān)聯(lián)關(guān)系,, 需要重新進(jìn)行創(chuàng)建,。 2.1.2.4 全表比對方式: 全表比對的方式是采用MD5 校驗碼,ETL 工具事先為要抽取的表建立一個結(jié)構(gòu)類似的 MD5 臨時表,,該臨時表記錄源表主鍵以及根據(jù)所有字段的數(shù)據(jù)計算出來的MD5 校驗碼,, 每次進(jìn)行數(shù)據(jù)抽取時,對源表和MD5 臨時表進(jìn)行MD5 校驗碼的比對,,如有不同,,進(jìn)行 Update 操作,如目標(biāo)表沒有存在該主鍵值,,表示該記錄還沒有,,即進(jìn)行Insert 操作,。 優(yōu)點(diǎn):對已有系統(tǒng)表結(jié)構(gòu)不產(chǎn)生影響,不需要修改業(yè)務(wù)操作程序,,所有抽取規(guī)則由ETL 完成,,管理維護(hù)統(tǒng)一,可以實(shí)現(xiàn)數(shù)據(jù)的遞增加載,,沒有風(fēng)險,。。 缺點(diǎn):ETL 比對較復(fù)雜,,設(shè)計較為復(fù)雜,,速度較慢。與觸發(fā)器和時間戳方式中的主動通 知不同,,全表比對方式是被動的進(jìn)行全表數(shù)據(jù)的比對,,性能較差。當(dāng)表中沒有主鍵或唯一列 且含有重復(fù)記錄時,,全表比對方式的準(zhǔn)確性較差,。 2.1.2.5 日志表方式 在業(yè)務(wù)系統(tǒng)中添加系統(tǒng)日志表,當(dāng)業(yè)務(wù)數(shù)據(jù)發(fā)生變化時,,更新維護(hù)日志表內(nèi)容,,當(dāng)作 ETL 加載時,通過讀日志表數(shù)據(jù)決定加載那些數(shù)據(jù)及如何加載,。 優(yōu)點(diǎn):不需要修改業(yè)務(wù)系統(tǒng)表結(jié)構(gòu),,源數(shù)據(jù)抽取清楚,速度較快,??梢詫?shí)現(xiàn)數(shù)據(jù)的遞增 加載。 缺點(diǎn):日志表維護(hù)需要由業(yè)務(wù)系統(tǒng)完成,,需要對業(yè)務(wù)系統(tǒng)業(yè)務(wù)操作程序作修改,,記錄日 志信息。日志表維護(hù)較為麻煩,,對原有系統(tǒng)有較大影響,。工作量較大,改動較大,,有一定風(fēng) 險,。 2.1.2.6 Oracle 變化數(shù)據(jù)捕捉(CDC 方式): 通過分析數(shù)據(jù)庫自身的日志來判斷變化的數(shù)據(jù)。Oracle 的改變數(shù)據(jù)捕獲(CDC,, Changed Data Capture)技術(shù)是這方面的代表,。CDC 特性是在Oracle9i 數(shù)據(jù)庫中引入 的。CDC 能夠幫助你識別從上次抽取之后發(fā)生變化的數(shù)據(jù),。利用CDC,,在對源表進(jìn)行 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í)時的捕獲變化數(shù)據(jù)并存儲到變化表中,發(fā)布者與訂閱都位于同一數(shù)據(jù)庫 中,;異步模式則是基于Oracle 的流復(fù)制技術(shù),。 優(yōu)點(diǎn):提供了易于使用的API 來設(shè)置CDC 環(huán)境,縮短ETL 的時間,。不需要修改業(yè)務(wù)系統(tǒng) 表結(jié)構(gòu),,可以實(shí)現(xiàn)數(shù)據(jù)的遞增加載。 缺點(diǎn):業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫版本與產(chǎn)品不統(tǒng)一,,難以統(tǒng)一實(shí)現(xiàn),,實(shí)現(xiàn)過程相對復(fù)雜,并且需 深入研究方能實(shí)現(xiàn),,CDC 產(chǎn)品推出時間短,,難免存在BUG。
|