ETL增量抽取方案
一、.ETL體系結構
資料庫--->抽取---> 轉換--->載入--->目的資料來源
二、ETL抽取方案
1).全量抽取
全量抽取類似於資料遷移或資料複製,它將資料來源中的表或檢視的資料原封不動的從資料庫中抽取出來,並轉換成自己的ETL工具可以識別的格式,全量抽取比較簡單。全量抽取一般只在系統初始化時使用,全量一次後,就要每天採用增量抽取。
2).增量抽取
增量抽取只抽取自上次抽取以來資料庫中要抽取的表中新增或者修改的資料。在ETL使用中,增量抽取使用更加廣泛。
怎樣獲取變化的資料是增量抽取的關鍵。對於捕獲方法的要求一般有:準確性,一致性,完整性,效能。
準確性:能夠將業務系統中的變化資料按一定的規則準確的捕獲到。
一致性:源表和目標表中資料的一致。不能有欄位的不一致。
完整性:要求源表中應該放入到目標表中的資料均被放入到目標表中。
效能:因為一個公司晚上一般有大量的跑批,像我們公司,從凌晨12點開始,N個系統排隊跑批,一般排到早上七八點鐘。所以這就要求效能一定要優。不能對業務系統造成太大的壓力,影響現有業務。
目前增量資料抽取中常用的捕獲變化資料的方法有:
1.時間戳
在源表上增加一個時間戳欄位,當系統中更新修改表資料的時候,同時修改時間戳欄位。當進行資料抽取的時候,通過時間戳來抽取增量資料。
優點:效能比較好。ETL系統設計清晰,源資料抽取相對清楚簡單,可以實現資料的遞增載入。
缺點:對業務系統要求較高,需要新增時間戳欄位。
無法獲取到時間戳以前資料的delete操作和update操作,在資料準確性上受到了一定的限制。
2.觸發器方式(又稱快照式)
在抽取表上建立需要的觸發器,一般需要建立插入、修改、刪除三個觸發器,每當表中的資料發生變化時,就被相應的觸發器將變化寫入一個臨時表,抽取執行緒從臨時表中抽取資料,臨時表中抽取過的資料被標記或刪除。
優點:資料抽取效能高,ETL載入規則簡單,速度快,不需要修改業務系統表結構,可以實現資料的遞增載入。
缺點:要求業務表建立觸發器,對業務系統有一定的影響。
3.全量刪除插入方式
每次先清空目標表資料,然後全量載入資料。
優點:載入規則簡單,速度快。
缺點:出現問題不容易查詢,效能慢
4.全表比對方式
5.日誌表方式
在業務系統中新增系統日誌表,當業務資料發生變化時,更新維護日誌表內容,當作ETL載入時,通過讀日誌表資料決定載入哪些資料及如何載入。
優點:不需要修改業務系統表結構,源資料抽取清楚,速度較快。可以實現資料的遞增載入。
缺點:日誌表維護需要由業務系統完成,需要對業務系統業務操作程式作修改,記錄日誌資訊。日誌表維護較為麻煩,對原有系統有較大影響。工作量較大,改動較大,有一定風險。
目前我們用的就是時間戳方式,採取T+1取數方式,即今天凌晨獲取昨天的業務資料,然後將昨天的業務資料的增量抽取過來。
這種方式效能比較好,但是delete和update操作時,不容易獲取,因此出現過幾個錯誤。再就是,對於時效性來說,一定要保證時間戳的抽取正確。
三、目前常用的載入策略有如下幾種:
1) trunctae and insert.直接清空目標表,然後把新的資料載入進去。(日全量規則經常採用此方法)
2) deldte and insert.先根據規則清除當天的記錄,然後把當天的新資料追加進去。(日增量規則經常採用此方法)
3) update and insert.用新資料與目標表中的歷史資料進行比較,有變化的則更新,新記錄則直接插入到目標表中。(暫時沒有用到)
4) keep history change.保持歷史的變化,通常是拉鍊記歷史的方式實現。(暫時沒有用過)