增量ETL資料抽取的策略及方法
這是很久以前在處理增量時的老文章,近年實施大量專案中的經驗處理方式是往往不得已時才採取增量處理的方式。而更多采用的方式是嚴格控制操作資料視窗,在滿足業務限制及分析需求的前提下力求資料更新視窗最小化,這種最簡單的策略反而被證明是一種簡單、快速、高效的做法。以下是舊文:
增量資料抽取是指在進行ETL操作時,只抽取源資料中發生改變的地方,沒有發生變化的以抽取資料不進行重複的抽取,增量抽取與完全抽取及更新相對。
1、增量抽取特點
1.只抽取發生變化的地方;
2.相對於完全抽取更快捷,處理量減少;
3.採用增量抽取需要在與資料裝載時的更新策略相對應;
當源系統資料量浩大,或需要在相對實時的情況下裝載業務系統的資料時,完全抽取幾乎不太可能,此時應該考慮合理的增量抽取策略。
2、增量抽取策略
增量抽取的策略在Bill Inmon的經典著作《Building the Data Warehouse》裡已有所提及,主要包括以下方法:
- 時間戳:掃描資料記錄的更改時間戳,比較時間戳以確定被更新的資料;
- 增量檔案:掃描應用程式在更改資料時所紀錄的資料變化增量檔案,增量檔案僅僅資料所發生的變化;
- 審計檔案和日誌檔案:審計檔案和日誌檔案本質上和增量檔案一樣,審計檔案和日誌檔案的目的是為了實現恢復機制,因此它們記載了各種操作的影響;
- 修改應用程式程式碼:修改應用程式碼以產生時間戳、增量檔案、日誌等資訊,或直接推送更新內容,達到增量更新目標資料的目的;
- 快照比較:在每次抽取前首先對源資料做快照,並將該快照與上次抽取時建立快照相互比較,以確定源資料所作的更改,並抽取相應更改內容;一般需要逐表逐記錄進行比較。
3、增量抽取方法
1)時間戳及增量檔案
在處理增量抽取時,時間戳法和增量檔案法是相對簡單高效的方法,如果源系統的資料記錄中已經提供了這些特徵資料,則應優先採用相應增量抽取策略。
2)觸發器
當源系統的資料是基於資料庫儲存時,可在源資料庫管理系統中設定觸發器偵聽源資料的增刪改事件以監控資料的增量變化,並進一步採取措施將增量變化反映到目標資料中。
具體措施有:
A. 使用配套DTS工具直接捕獲資料變化事件並實時重新整理目標資料;
B. 與時間戳法或增量檔案法結合,在資料變化事件處理邏輯中設定時間戳或產生增量記錄;
C. 在捕獲到資料變化時間時將增量資料追加到stage table中;
設定觸發器的方法邏輯複雜並且會影響源資料庫系統的效率。
3)HASH法
快照比較法的改進版本。
在每次抽取時,針對需要偵測變化的內容在Stage區或目標區做快照,快照的方式不是簡單的保留快照期的資料記錄,而是將其分組(比如按表分組),對每一組資料只記錄改組中每一條記錄的所有列組合的Hash值;下次快照時,提取源資料,計算各組Hash值,並根據鍵值與對應Hash值比較,如果不相等則對應記錄的某列資料發生了變化。
採用適當的編碼方式,hash值中還可以記錄較為詳細的資訊,比如各記錄的列及資料變化的操作型別(增、改等)。對於刪除的處理則依賴於鍵值。
4)源資料庫系統增量機制CDC(change data capture)
A.SQLServer
為了克服使用時間戳及觸發器的弊端,SQLServer2008中提供了更改跟蹤與變更資料捕獲兩種跟蹤資料變化的方法,這兩種方法都是基於日誌檔案的增量策略。
其中,變更資料捕獲通過獲取進行 DML 更改的方面和更改的實際資料,記錄歷史更改資訊;而更改跟蹤則只是捕獲更改了錶行這一事實,但不捕獲更改的資料。
詳細資訊可進一步參考如下資源:
B. Oracle
1) 物化日誌結合物化檢視的方法(Materialized)
在源系統中建立物化日誌記錄增刪改等資料變更操作;在目標系統中建立物化檢視將物化日誌轉變為變更資料。
2)CDC
Oracle 9i之後提供CDC技術,以現成的管理框架及較小執行效率代價支援對變化資料的捕獲,除了可用來支援增量ETL之外,還可以用來支援其他應用,比如實時資料獲取並圖形化應用。
Oracle CDC包括兩種方式:
A. 同步變化資料捕獲(底層基於觸發器);
B. 非同步變化資料捕獲(基於審計日誌、流機制);
詳細資訊可進一步參考如下資源: