DMETL實現了增量數據的同步。在源表上進行的增刪改操作,可以通過增量數據抽取,同步到目的表中。在第一次將源表數據全量抽取到目的表中后,可以通過重復地執行增量數據抽取,將源表上的增刪改操作產生的變化數據,無遺漏地同步到目的表中,從而實現源表和目的表的長期同步。由于不需要每次都同步全量數據,當全量數據巨大,而每次變化數據較少時,可以大幅提升數據同步的效率。
DMETL中“增量表讀取“提供對已建立好的數據庫數據源中增量表的數據讀取功能,并且可以對數據讀取列、數據行、緩存以及并發等選項的設置。
DMETL支持的增量有:
觸發器增量:是通過在基表上建立觸發器,捕捉基表上發生的增刪改操作,從而產生增量數據。觸發器方式可以捕捉到插入和修改的大對象數據。
影子表增量:是在數據源中,建立一張和基表結構相同的影子表。當基表上發生了增刪改操作后,在增量數據集進行刷新操作時,通過比較基表和影子表的數據,從而獲得增量數據。
MD5增量:通過將變化前后的數據進行MD5 散列處理,然后比對MD5 的散列值是否相同來實現。
時間戳增量:通過一條記錄修改的時間戳值或生成的時時間戳值來決定是否遷移。
Oracle CDC 增量方式:是“Oracle變化數據捕捉”(Changed Data Capture)的簡稱,利用了Oracle內建的存儲函數和過程捕捉和發布變化數據,本質是分析日志的方式,獲得Oracle 數據庫中某張表上的數據變化,從而實現增量數據的抽取。
DMHS 增量:DMHS是“DM異構同步”的簡稱。DMHS工具通過解析數據庫日志,在不同的數據庫之間實現數據同步。
各種增量方式的比較和使用建議
增量方式 | 效率 | 通用性 | 使用建議 |
觸發器 | 高 | 在表上進行增量抽取 | 一般情況下建議使用 |
影子表 | 較高 | 在表或視圖上進行增量抽取 | 一般情況下建議使用,但比較列包含大對象類型時,效率較低 |
MD5 | 低 | 在表或視圖上進行增量抽取 | 需要在大對象類型列上進行比較時可使用 |
時間戳 | 較高 | 在表或視圖上進行增量抽取 | 需要修改時間戳列,因此需要數據庫支持時間戳自動更新,或手工更新時間戳列 |
DMHS | 高 | DM數據庫中,在表上進行增量抽取 | 需要安裝DMHS工具。當對性能要求較高時建議使用 |
Oracle ? CDC | 高 | Oracle數據庫中,在表上進行增量抽取 | sync方式不支持大對象類型列的比較。當對實時性要求較高時建議使用sync方式 ,hotlog方式可能有延時,但是對數據源的影響較小 |
表格 1
使用建議:
源庫權限 | 是否要同步update和delete操作 | 數據量 | 建議(按優先級排列) |
只讀 | 否 | 小 | 1. ? 如果目的表上有主鍵或者唯一索引,可以使用全量抽取,然后在表目的上使用插入更新選項。 2. ?每次同步前先刪除目的表的數據,然后在進行全量同步。 |
大 | 1. ?如果源表上有序列或者自增列可以使用帶參數的sql查詢進行同步,參見典型示例《基于變量實現斷點續傳和增量抽取》 2. 如果源是dmhs支持的數據庫,則可以通過dmhs進行 | ||
是 | 小 | 1. ?每次同步前先刪除目的表的數據,然后在進行全量同步。 | |
1. 如果源是dmhs支持的數據庫,則可以通過dmhs進行 2. Oracle CDC (需要在源庫上有oracle cdc的相關權限) | |||
讀寫 | 不限 | 大 | 1. Oracle CDC 2. ?觸發器增量 3. ?DMHS |
小 | 1. 影子表增量 2. MD5增量 |
表格 2
注:數據量在100w以內的都可以認為是小表,超過100w的為大表。
添加增量表方式
通過工具欄的“數據讀取“中的“增量表”選擇的數據集,就可以在普通表上添加增量表。比如下圖,是在普通表DEPARTMENT_T1上添加的MD5_CDC表。
圖1
表/視圖選擇的數據集是普通表,增量表比普通表多兩列CDC_ID和CDC_OPT(圖4),用來記錄對源表的操作。當對源表進行插入、更新、刪除時,目的表中記錄會相應地更改。
本文以增加MD5增量表為例,進行增量演示(該示例可在DMETL示例庫中找到,或按如下步驟創建):
1.??? 創建數據源及目的表
在數據集DMETL_SAMPLE 庫下添加表DEPARTMENT_T1、DEPARTMENT_T2(圖2),在表DEPARTMENT_T1 處添加MD5 增量表(圖3~5):
圖 2 DEPARTMENT_T1、DEPARTMENT_T2表結構
圖3
圖4
圖 5 DEPARTMENT_T1表的MD5增量表DEPARTMENT_T1_MD5_CDC
2.??? 創建轉換
轉換名稱:“增量表演示”
圖6
圖7 轉換流程圖
圖7中源表及目的表分別選擇第一步中創建的MD5_CDC表及T2表。
3.??? 往源表插入、更新數據,執行轉換
第一步中創建表后,并沒有往表里添加記錄
圖8
接下來,往T1表中增加、更新記錄:
圖9
執行圖7所示的轉換后,瀏覽三張表分別得到如圖所示結果:
圖10
增量表:為了方便做增量抽取。增量抽取只抽取自上次抽取以來數據庫中要抽取的表中變化的數據,將捕獲的變化數據寫入到對應的CDC表(增量表)中。在ETL 使用過程中,增量抽取較全量抽取應用更廣。如何捕獲變化的數據是增量抽取的關鍵。對捕獲方法一般有兩點要求:①準確性,能夠將業務系統中的變化數據按一定的頻率準確地捕獲到;②性能,不能對業務系統造成太大的壓力,影響現有業務。本文以MD5增量為例,對增量抽取流程做了簡單介紹,實際使用中請考慮系統特性,選擇合適的增量抽取方式。