為了實現資料倉儲中的更加高效的資料處理,今天和小黎子一起來探討ETL系統中的增量抽取方式。增量抽取是資料倉儲ETL(資料的抽取(extraction)、轉換(transformation)和裝載(loading))實施過程中需要重點考慮的問題。ETL抽取資料的過程中,增量抽取的效率和可行性是決定ETL實施成敗的關鍵問題之一,做過資料建模的小夥伴都知道ETL中的增量更新機制比較複雜,採用何種機制往往取決於源資料系統的型別以及對增量更新效能的要求。今天我們只重點對各種方法進行對比分析,從而總結各種機制的使用條件和優劣性,為資料倉儲專案的ETL工程的實施提供增量抽取技術方案參考。
在資料庫倉庫開發過程中,無論是全量抽取方案還是增量抽取方案,抽取資料的工作一般由資料倉儲工具來完成。目前資料倉儲開發工具非常多,比如SE-DWA,DTS,Kettle等等。雖然增量抽取方案設定比較簡單,但是我們還是需要具體來了解一下增量抽取機制以便後續更合理的利用增量抽取方案。下面討論各種增量抽取的實現機制原理。
一、增量抽取的機制
實現增量抽取關鍵準確快速的捕獲變化的資料。優秀的增量抽取機制要求ETL能夠將業務系統中的變化資料按一定的頻率準確地捕獲,同時不能對業務系統造成太大的壓力,影響現有業務。相對全量抽取而言,增量抽取的設計更復雜,有一種將全量抽取過程自動轉換為增量抽取過程的ETL設計思路,前提是必須捕獲變化的資料,增量資料抽取中常用的捕獲變化資料的方法小黎子瞭解到的有以下四種方式:
1 、基於建觸發器方式生成增量資料
使用觸發器生成增量資料是普遍採取的一種增量抽取機制。該方式是根據抽取要求,在要被抽取的源表上建立3個觸發器插入、修改、刪除,每當源表中的資料發生變化,就被相應的觸發器將變化的資料寫入一個增量日誌表,ETL的增量抽取則是從增量日誌表中而不是直接在源表中抽取資料,同時增量日誌表中抽取過的資料要及時被標記或刪除。
為了簡單演示,增量日誌表一般不儲存增量資料的所有欄位資訊,而只是儲存源表名稱、更新的關鍵字值和更新操作型別(knsen、update或delete),ETL增量抽取程式首先根據源表名稱和更新的關鍵字值,從源表中提取對應的完整記錄,再根據更新操作型別,對目標表進行相應的處理。
優點:資料庫本身的觸發器機制,契合度高,可靠性高,不會存在有增量資料未被捕獲到的現象
缺點:對於源系統有較大的影響,需要建立觸發器機制,增加運維人員,還要建立臨時表,儲存臨時表,增加儲存成本和運維成本
2 、基於時間戳方式生成增量資料
時間戳方式是指增量抽取時,抽取程式通過比較系統時間與抽取源表的時間戳欄位的值來決定抽取哪些資料。這種方式需要在源表上增加一個時間戳欄位,系統中更新修改表資料的時候,同時修改時間戳欄位的值。
有的資料庫(例如Sql Server)的時間戳支援自動更新,即表的其它欄位的資料發生改變時,時間戳欄位的值會被自動更新為記錄改變的時刻。在這種情況下,進行ETL實施時就只需要在源表加上時間戳欄位就可以了。對於不支援時間戳自動更新的資料庫,這就要求業務系統在更新業務資料時,通過程式設計的方式手工更新時間戳欄位。使用時間戳方式可以正常捕獲源表的插入和更新操作,但對於刪除操作則無能為力,需要結合其它機制才能完成。
優點:資料處理邏輯清楚,速度較快,成本低廉,流程簡單
缺點:要求源表的時間欄位必須是隨表變動而變動的不為空資料,由於是直接讀取表資料,該方法無法獲取刪除型別的資料。
3、 基於全表比對方式生成增量資料
全表比對即在增量抽取時,ETL程式逐條比較源表和目標表的記錄,將新增和修改的記錄讀取出來。
優化之後的全部比對方式是採用MD5校驗碼,需要事先為要抽取的表建立一個結構類似的MD5臨時表,該臨時表記錄源表的主鍵值以及根據源表所有欄位的資料計算出來的MD5校驗碼,每次進行資料抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,如有不同,進行update操作:如目標表沒有存在該主鍵值,表示該記錄還沒有,則進行insert操作。然後,還需要對在源表中已不存在而目標表仍保留的主鍵值,執行delete操作。
優點:因為是基於目標對比抽取資料,所以對源系統無影響
缺點:該方法僅僅適合表有主鍵,唯一鍵或者資料量較小的表,不然海量資料中每條資料的每一列都進行逐一比對,很顯然這種頻繁的I/O操作以及複雜的比對運算會造成很大的效能開銷。這樣操作需要足夠的硬體做支撐
4 、基於日誌表方式生成增量資料
對於建立了業務系統的生產資料庫,可以在資料庫中建立業務日誌表,當特定需要監控的業務資料發生變化時,由相應的業務系統程式模組來更新維護日誌表內容。增量抽取時,通過讀日誌表資料決定載入哪些資料及如何載入。日誌表的維護需要由業務系統程式用程式碼來完成。
優點:可以做到資料無誤差傳輸,有回滾機制,有容災備份的能力
缺點:資料庫開歸檔模式會對源系統資料庫的磁碟造成壓力,增加儲存成本,此外大多數資料庫的日誌都是不對外開放的,只針對資料庫本身的工具開放讀取
二、比較和分析
可見,ETL在進行增量抽取操作時,有以上各種機制可以選擇。現從相容性、完備性、效能和侵入性3個方面對這些機制的優劣進行比較分析。各種資料增量抽取機制的優劣性綜合分析如下圖所示。
通過對各種增量抽取機制的對比分析,我們發現,沒有一種機制具有絕對的優勢,不同機制在各種因素的表現大體上都是相對平衡的。所以,ETL實施過程中究競選擇哪種增量抽取機制,要根據實際的資料來源系統環境進行決策,需要綜合考慮源系統資料庫的型別、抽取的資料量(決定對效能要求的苛刻程度)、對源業務系統和資料庫的控制能力以及實現難度等各種因素,甚至結合各種不同的增量機制以針對環境不同的資料來源系統進行ETL實施。
三、總結
為了實現資料倉儲中資料的高效抽取,增量抽取是ETL資料抽取過程中非常重要的一步,實現增量抽取的機制直接決定了資料倉儲專案整體開發的效果。我們通過對比幾種常見的增量抽取機制並總結了各種機制的特性並分析了它們的優劣。各種增量抽取機制都有它有存在的價值和固有的限制條件,所以在ETL的設計和實施工作過程中,只能依據專案的實際環境進行綜合考慮,甚至需要對可採用的多種機制進行實際的測試,才能確定一個最優的增量抽取方法。