ETL之增量抽取方式


1、觸發器方式
觸發器方式是普遍采取的一種增量抽取機制。該方式是根據抽取要求,在要被抽取的源表上建立插入、修改、刪除3個觸發器,每當源表中的數據發生變化,就被相應的觸發器將變化的數據寫入一個增量日志表,ETL的增量抽取則是從增量日志表中而不是直接在源表中抽取數據,同時增量日志表中抽取過的數據要及時被標記或刪除。為了簡單起見,增量日志表一般不存儲增量數據的所有字段信息,而只是存儲源表名稱、更新的關鍵字值和更新操作類型(KNSEN、UPDATE或DELETE),ETL增量抽取進程首先根據源表名稱和更新的關鍵字值,從源表中提取對應的完整記錄,再根據更新操作類型,對目標表進行相應的處理。

例如,對於源表為ORACLE類型的數據庫,采用觸發器方式進行增量數據捕獲的過程如下:

這樣,對表T的所有DML操作就記錄在增量日志表DML_LOG中,注意增量日志表中並沒有完全記錄增量數據本身,只是記錄了增量數據的來源。進行增量ETL時,只需要根據增量日志表中的記錄情況,反查源表得到真正的增量數據。
SQL代碼
(1)創建增量日志表DML_LOG:
CREATE TABLE DML_LOG(
ID NUMBER PRIMARY KEY, //自增主鍵
TABLE NAME VARCHAR2(200). //源表名稱
RECORD ID NUMBER, //源表增量記錄的主鍵值
DML TYPE CH根(1)。∥增量類型,I表示新增:U表示更新;D表示刪除
EXECUTE DATE DATE //發生時間
);

(2)為DML_LOG創建一個序列SEQ_DML_LOG上,以便觸發器寫增量日志表時生成ID值。
(3)針對要監聽的每一張表,創建一個觸發器,例如對表TEST創建觸發器如下:
CREATE OR REPLACE TRIGGER T BEFORE INSERT OR UPDATE
OR DELETE ON T FOR EACH ROW
DECLARE 1 DML TYPE VARCHAR2(1);
BEGIN
IF INSERTING THEN L_DML TYPE:= I’;
ELSIF UPDATING THEN I_DML_TYPE:=。TY;
ELSIF DELETING THEN L_DML_TYPE:= D’;
ENDIF;

IF DELETING THEN
INSERT INTO DML_LOG(ID,TABLE_NAME,RECORD—
ID,EXECUTE_DATE,DMLJYPE)
VALUES(SEQ_DML_LOG.NEXTVAL,’TEST ,:OLD.ID,SYSDATE,
L_DML_TYPE);
ELSE
INSERT INTO DML_LOG(ID,TABLE_NAME,RECORD_
ID,EXECUTE_DATE,DMLJYPE)
VALUES(SEQ_DML_LOG.NEXTVAL,。TEST ,:NEW.ID,SYSDATE,L
TIROL_TYPE);
ENDIF;
END;

2、時間戳方式

時間戳方式是指增量抽取時,抽取進程通過比較系統時間與抽取源表的時間戳字段的值來決定抽取哪些數據。這種方式需要在源表上增加一個時間戳字段,系統中更新修改表數據的時候,同時修改時間戳字段的值。有的數據庫(例如SQL SERVER)的時間戳支持自動更新,即表的其它字段的數據發生改變時,時間戳字段的值會被自動更新為記錄改變的時刻。在這種情下,進行ETL實施時就只需要在源表加上時間戳字段就可以了。對於不支持時間戳自動更新的數據庫,這就要求業務系統在更新業務數據時,通過編程的方式手工更新時間戳字段。使用時間戳方式可以正常捕獲源表的插入和更新操作,但對於刪除操作則無能為力,需要結合其它機制才能完成。

更新時間戳:

3、全表刪除插入方式

全表刪除插入方式是指每次抽取前先刪除目標表數據,抽取時全新加載數據。該方式實際上將增量抽取等同於全量抽取。對於數據量不大,全量抽取的時間代價小於執行增量抽取的算法和條件代價時,可以采用該方式。

4、全表比對方式

全表比對即在增量抽取時,ETL進程逐條比較源表和目標表的記錄,將新增和修改的記錄讀取出來。優化之后的全部比對方式是采用MD5校驗碼,需要事先為要抽取的表建立一個結構類似的MD5臨時表,該臨時表記錄源表的主鍵值以及根據源表所有字段的數據計算出來的(BI)

MD5校驗碼,每次進行數據抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,如有不同,進行UPDATE操作:如目標表沒有存在該主鍵值,表示該記錄還沒有,則進行INSERT操作。

然后,還需要對在源表中已不存在而目標表仍保留的主鍵值,執行DELETE操作。

5、日志表方式

對於建立了業務系統的生產數據庫,可以在數據庫中創建業務日志表,當特定需要監控的業務數據發生變化時,由相應的業務系統程序模塊來更新維護日志表內容。增量抽取時,

通過讀日志表數據決定加載哪些數據及如何加載。日志表的維護需要由業務系統程序用代碼來完成。

6、系統日志分析方式

該方式通過分析數據庫自身的日志來判斷變化的數據。關系犁數據庫系統都會將所有的DML操作存儲在日志文件中,以實現數據庫的備份和還原功能。ETL增暈抽取進程通過對數據庫的日志進行分析,提取對相關源表在特定時間后發生的DML操作信息,就可以得知自上次抽取時刻以來該表的數據變化情況,從而指導增量抽取動作。有些數據庫系統提供了訪問日志的專用的程序包(例如ORACLE的LOGMINDER),使數據庫日志的分析工作得到大大簡化。

、特定數據庫方式(ORACLE)
以下介紹常見的針對特有數據庫系統的增景抽取方式。
7.1 ORACLE改變數據捕獲(CHANGEDDATACAPTURE,CDC)方式:ORACLECDC特性是在ORAELE9I數據庫中引入的。CDC能夠幫助識別從上次抽取之后發生變化的數據。
利用CDC,在對源表進行INSERT、UPCLATE或DELETE等操作的同時就可以提取數據,並且變化的數據被保存在數據庫的變化表中。這樣就可以捕獲發生變化的數據,然后利用數據庫視圖以一種可控的方式提供給ETL抽取進程,作為增量抽取的依據。CDC方式對源表數據變化情況的捕獲有兩種方式:同步CDC和異步CDC。同步CDC使用源數據庫觸發器來捕獲變更的數據。這種方式是實時的,沒有任何延遲。當DML操作提交后,變更表中就產生了變更數據。異步CDC使用數據庫重做日志(REDOLOG)文件,在源數據庫發生變更以后,才進行數據捕獲。
7.2 ORACLE閃回查詢方式:ORACLE9I以上版本的數據庫系統提供了閃回查詢機制,允許用戶查詢過去某個時刻的數據庫狀態。這樣,抽取進程可以將源數據庫的(BI)
當前狀態和上次抽取時刻的狀態進行對比,快速得出源表數據記錄的變化情況。

8、比較和分析

可見,ETL在進行增量抽取操作時,有以上各種機制可以選擇。現從兼容性、完備性、性能和侵入性3個方面對這些機制的優劣進行比較分析。數據抽取需要面對的源系統,並不一定都是關系型數據庫系統。某個ETL過程需要從若干年前的遺留系統中抽取EXCEL或者CSV文本數據的情形是經常發牛的。這時,所有基於關系型數據庫產品的增量機制都無法工作,時間戳方式和全表比對方式可能有一定的利用價值,在最壞的情況下,只有放棄增量抽取的思路,轉而采用全表刪除插入方式。完備性方面,時間戳方式不能捕獲DELETE操作,需要結合其它方式一起使用。增量抽取的性能因素表現在兩個方面,一是抽取進程本身的性能,二是對源系統性能的負面影響。觸發器方式、日志表方式以及系統日志分析方式由於不需要在抽取過程中執行比對步驟,所以增量抽取的性能較佳。全表比對方式需要經過復雜的比對過程才能識別出更改的記錄,抽取性能最差。在對源系統的性能影響方面,觸發器方式由於是直接在源系統業務表上建立觸發器,同時寫臨時表,對於頻繁操作的業務系統可能會有一定的性能損失,尤其是當業務表上執行批量操作時,行級觸發器將會對性能產生嚴重的影響;同步CDC方式內部采用觸發器的方式實現,也同樣存在性能影響的問題;全表比對方式和日志表方式對數據源系統數據庫的性能沒有任何影響,只是它們需要業務系統進行額外的運算和數據庫操作,會有少許的時間損耗;時間戳方式、系統日志分析方式以及基於系統日志分析的方式(異步CDC和閃回查詢)對數據庫性能的影響也是非常小的。對數據源系統的侵入性是指業務系統是否要為實現增抽取機制做功能修改和額外操作,在這一點上,時間戳方式值得特別關注該方式除了要修改數據源系統表結構外,對於不支持時間戳字段自動更新的關系型數據庫產品,還必須要修改業務系統的功能,讓它在源表T執行每次操作時都要顯式的更新表的時間戳字段,這在ETL實施過程中必須得到數據源系統高度的配合才能達到,並且在多數情況下這種要求在數據源系統看來是比較“過分”的,這也是時間戳方式無法得到廣泛運用的主要原因。另外,觸發器方式需要在源表上建立觸發器,這種在某些場合中也遭到拒絕。還有一些需要建立臨時表的方式,例如全表比對和日志表方式。可能因為開放給ETL進程的數據庫權限的限制而無法實施。同樣的情況也可能發生在基於系統日志分析的方式上,因為大多數的數據庫產品只允許特定組的用戶甚至只有DBA才能執行日志分析。閃回查詢在侵入性方面的影響是最小的.

 

在我從事的ETL工作中,大部分都是采用時間戳方式進行增量抽取,如銀行業務,VT新開戶,使用時間戳方式,可以在固定時間內,組織人員進行數據抽取,進行整合后,加載到目標系統。而觸發器方式,雖然可以自動進行抽取,但是執行頻率過多,影響效率!第三種方式對於大數據量來說是非常不可取的,尤其是對於一些銀行、電信行業,因為數據全量比較大,所以進行增量校對是比較耗時的,總起來說,個人趨向使用時間戳方式進行增量抽取,當然具體情況要看工作的使用環境!

原文地址:https://www.cnblogs.com/fjhh/p/5370891.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM