例如,對於源表為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新開戶,使用時間戳方式,可以在固定時間內,組織人員進行資料抽取,進行整合後,載入到目標系統。而觸發器方式,雖然可以自動進行抽取,但是執行頻率過多,影響效率!第三種方式對於大資料量來說是非常不可取的,尤其是對於一些銀行、電信行業,因為資料全量比較大,所以進行增量校對是比較耗時的,總起來說,個人趨向使用時間戳方式進行增量抽取,當然具體情況要看工作的使用環境!
ETL增量抽取方式
增量是以乙個時間段為計量單位,記錄該段時間內較以前增加的資料記錄。增量抽取是將該段時間內增長的記錄查詢出來。增量抽取一般有三種抽取模式,用於捕獲源系統新增的資料到系目標庫中 1 時間戳方式,要求源表中存在乙個或多個字段 時間戳 其值隨著新紀錄的增加而不斷增加,執行資料抽取時,程式通過時間戳對資料進行...
ETL增量抽取方案
一 etl體系結構 資料庫 抽取 轉換 載入 目的資料來源 二 etl抽取方案 1 全量抽取 全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的etl工具可以識別的格式,全量抽取比較簡單。全量抽取一般只在系統初始化時使用,全量一次後,就要每天...
ETL增量抽取方法講解
一 etl體系結構 資料庫 抽取 轉換 載入 目的資料來源 二 etl抽取方案 1 全量抽取 全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的etl工具可以識別的格式,全量抽取比較簡單。全量抽取一般只在系統初始化時使用,全量一次後,就要每天...