ETL數據採集方法

一、觸發器方式 算法

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

二、時間戳方式編程

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

三、全表刪除插入方式工具

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

四、全表比對方式日誌

全表比對即在增量抽取時,ETL進程逐條比較源表和目標表的記錄,將新增和修改的記錄讀取出來。優化以後的所有比對方式是採用MD5校驗碼,須要事先爲要抽取的表創建一個結構相似的MD5臨時表,該臨時表記錄源表的主鍵值以及根據源表全部字段的數據計算出來的MD5校驗碼,每次進行數據抽取時,對源表和MD5臨時表進行MD5校驗碼的比對,若有不一樣,進行UPDATE操做:如目標表沒有存在該主鍵值,表示該記錄尚未,則進行INSERT操做。而後,還須要對在源表中已不存在而目標表仍保留的主鍵值,執行DELETE操做。進程

五、日誌表方式同步

對於創建了業務系統的生產數據庫,能夠在數據庫中建立業務日誌表,當特定須要監控的業務數據發生變化時,由相應的業務系統程序模塊來更新維護日誌表內容。增量抽取時,經過讀日誌表數據決定加載哪些數據及如何加載。日誌表的維護須要由業務系統程序用代碼來完成。監控

六、系統日誌分析方式

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

七、Oracle數據庫方式

1)ORACLE改變數據捕獲(CHANGED DATA CAPTURE,CDC)方式:ORACLE CDC特性是在ORAELE 9I數據庫中引入的。CDC可以幫助識別從上次抽取以後發生變化的數據。利用CDC,在對源表進行INSERT、UPCLATE或DELETE等操做的同時就能夠提取數據,而且變化的數據被保存在數據庫的變化表中。這樣就能夠捕獲發生變化的數據,而後利用數據庫視圖以一種可控的方式提供給ETL抽取進程,做爲增量抽取的依據。CDC方式對源表數據變化狀況的捕獲有兩種方式:同步CDC和異步CDC。同步CDC使用源數據庫觸發器來捕獲變動的數據,這種方式是實時的,沒有任何延遲,當DML操做提交後,變動表中就產生了變動數據。異步CDC使用數據庫重作日誌(REDO LOG)文件,在源數據庫發生變動之後,才進行數據捕獲。
2)ORACLE閃回查詢方式:ORACLE 9I以上版本的數據庫系統提供了閃回查詢機制,容許用戶查詢過去某個時刻的數據庫狀態。這樣,抽取進程能夠將源數據庫的當前狀態和上次抽取時刻的狀態進行對比,快速得出源表數據記錄的變化狀況。

八、由業務系統提供增量數據

有些應用場景,好比涉及政府相關行業的數據採集,可能某些數據庫不容許外部主動採集,這時可能解決辦法是由業務系統方直接提供增量數據。

九、能夠經過flume等相關工具自動採集

某些數據源比較適合使用flume進行採集,好比業務系統訪問日誌。

相關文章
相關標籤/搜索