專利名稱:一種基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域技術(shù)中的ETL技術(shù),主要應(yīng)用于一切涉及到數(shù)據(jù)倉(cāng)庫(kù)ETL操作的產(chǎn)品中。
背景技術(shù):
ETL是Extract (抽取)'Transform(轉(zhuǎn)換)、Load (加載)的簡(jiǎn)稱,是數(shù)據(jù)倉(cāng)庫(kù)實(shí)施工作的核心步驟。其中抽取有全量抽取和增量抽取兩種方式。全量抽取類似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,它將數(shù)據(jù)源中的數(shù)據(jù)一次性全部抽取到目標(biāo)數(shù)據(jù)庫(kù)中。全量抽取一般的實(shí)現(xiàn)方法是每次均刪除目標(biāo)數(shù)據(jù)庫(kù)中的數(shù)據(jù),全部重新加載數(shù)據(jù)源的數(shù)據(jù),這種方法的實(shí)現(xiàn)簡(jiǎn)單,但當(dāng)數(shù)據(jù)量較大時(shí),抽取的時(shí)間較長(zhǎng),性能非常差。增量抽取是在上次抽取的基礎(chǔ)上,只抽取新增或修改的數(shù)據(jù),與全量抽取相比,增量抽取所處理的數(shù)據(jù)量少,性能較好,不會(huì)對(duì)業(yè)務(wù)系統(tǒng)造成太大的性能壓力。增量抽取技術(shù)的難點(diǎn)在于如何捕獲業(yè)務(wù)系統(tǒng)的新增、修改、刪除的數(shù)據(jù),并基于這些變化的數(shù)據(jù)更新數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)。如果不能有效地捕獲這些變化的數(shù)據(jù),將嚴(yán)重影響增量抽取的效率。目前,現(xiàn)有的數(shù)據(jù)捕獲技術(shù)主要有觸發(fā)器方法、時(shí)間戳方法、全表對(duì)比方法、⑶C(Changed Data Capture,變化數(shù)據(jù)捕獲)方法,但這些方法要么只能解決某一方面的問(wèn)題,要么對(duì)業(yè)務(wù)系統(tǒng)具有較高的要求,如觸發(fā)器方法要求數(shù)據(jù)源具備觸發(fā)器的功能,且必須保證源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)的連接始終暢通;時(shí)間戳方法只能處理新增和修改的數(shù)據(jù),無(wú)法處理刪除的數(shù)據(jù);全表對(duì)比方法性能較差,且不能處理修改的數(shù)據(jù);CDC方法要求源數(shù)據(jù)庫(kù)與目標(biāo)數(shù)據(jù)庫(kù)為同構(gòu)的數(shù)據(jù)庫(kù)。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種可以增量抽取業(yè)務(wù)數(shù)據(jù)表中數(shù)據(jù)的方法,所述方法中業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)可以是異構(gòu)的。本發(fā)明的另一目的是提供一種使業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)只在增量抽取時(shí)處于連通狀態(tài)的增量抽取數(shù)據(jù)方法。為了解決現(xiàn)有技術(shù)存在的困難,達(dá)到上述目的,本發(fā)明提供了一種基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法,所述方法包括如下步驟步驟一、為業(yè)務(wù)系統(tǒng)中的每個(gè)需要增量抽取數(shù)據(jù)的表增加一個(gè)自增長(zhǎng)的代理鍵字段和一個(gè)時(shí)間戳字段;步驟二、新增或修改數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用時(shí)間戳的方式;步驟三、刪除數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用日志記錄的方式。優(yōu)選的是,步驟二中所述的時(shí)間戳方式包括如下步驟a在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中記錄每個(gè)數(shù)據(jù)表最近一次已抽取的時(shí)間戳值;b將所述修改數(shù)據(jù)所在行的時(shí)間戳字段的值設(shè)置為當(dāng)前的系統(tǒng)時(shí)間;·c增量抽取數(shù)據(jù)表中的數(shù)據(jù)時(shí),只抽取每個(gè)數(shù)據(jù)表中時(shí)間戳值大于最近一次已抽取的時(shí)間戳值的數(shù)據(jù);d將全局參數(shù)表中數(shù)據(jù)表的時(shí)間戳值更新為本次增量抽取的數(shù)據(jù)中最新的時(shí)間戳值。優(yōu)選的是,步驟三中所述的日志記錄的方式包括如下步驟I在系統(tǒng)中創(chuàng)建刪除日志表;II將刪除數(shù)據(jù)所在數(shù)據(jù)表的表名和所在行的代理鍵值寫(xiě)入所述刪除日志表中;III在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中,記錄每個(gè)數(shù)據(jù)表上次已處理的刪除記錄的最大代理鍵值;·
IV增量處理刪除記錄時(shí),只處理每個(gè)數(shù)據(jù)表中代理鍵值大于所述最大代理鍵值的刪除記錄對(duì)應(yīng)的數(shù)據(jù);V將數(shù)據(jù)倉(cāng)庫(kù)全局參數(shù)表中的最大代理鍵值更新為本次增量處理的數(shù)據(jù)中最大的代理鍵值。本發(fā)明的有益效果是本發(fā)明所述方法可以處理新增、修改、刪除的數(shù)據(jù);每次只抽取上次抽取后未抽取的新增或修改的數(shù)據(jù)和上次處理后未處理的刪除的數(shù)據(jù),業(yè)務(wù)數(shù)據(jù)量較小;業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)可以是異構(gòu)的;業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)允許只在抽取時(shí)處于連通狀態(tài),不必時(shí)時(shí)刻刻處于連通狀態(tài)。因此,本發(fā)明可以顯著提升數(shù)據(jù)的抽取效率,減輕抽取時(shí)對(duì)業(yè)務(wù)數(shù)據(jù)庫(kù)的壓力,降低抽取的技術(shù)復(fù)雜度。
圖I為本發(fā)明實(shí)施例中所述數(shù)據(jù)表的原結(jié)構(gòu)圖2為修改后的圖I數(shù)據(jù)表結(jié)構(gòu)圖3為本發(fā)明實(shí)施例中所述全局參數(shù)表中存儲(chǔ)的時(shí)間戳值圖4為本發(fā)明實(shí)施例中所述的刪除日志表的結(jié)構(gòu)圖5為本發(fā)明實(shí)施例中所述全局參數(shù)表中存儲(chǔ)的最大代理鍵值
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明,以使本領(lǐng)域普通技術(shù)人員參照本說(shuō)明書(shū)后能夠據(jù)以實(shí)施。本發(fā)明所述的一種基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法包括如下步驟步驟一、為業(yè)務(wù)系統(tǒng)中的每個(gè)需要增量抽取數(shù)據(jù)的表增加一個(gè)自增長(zhǎng)的代理鍵字段和一個(gè)時(shí)間戳字段,增加后每個(gè)數(shù)據(jù)表的每行數(shù)據(jù)都具有一時(shí)間戳值和代理鍵值。如圖I所示,在即時(shí)通訊(頂)軟件中,群組管理是一個(gè)常見(jiàn)的功能,群組用戶表存儲(chǔ)著群ID和用戶ID的對(duì)應(yīng)關(guān)系。為其增加一個(gè)自增長(zhǎng)的代理鍵字段“關(guān)系ID”和時(shí)間戳字段“修改時(shí)間”,此表中的每行數(shù)據(jù)就具有了關(guān)系ID值和修改時(shí)間值,圖2為修改后的結(jié)構(gòu)。步驟二、新增或修改數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用時(shí)間戳的方式。所述時(shí)間戳方式包括如下步驟a在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中記錄每個(gè)數(shù)據(jù)表最近一次已抽取的時(shí)間戳值。即業(yè)務(wù)數(shù)據(jù)表中小于所述時(shí)間戳值的行中的數(shù)據(jù)是在此次增量抽取之后未修改的,大于所述時(shí)間戳值的行中的數(shù)據(jù)是在此次增量抽取之后新修改的。如圖3所示,群組關(guān)系表的最近一次已抽取數(shù)據(jù)的最新的時(shí)間戳值為“2012-04-25 11:59:59”。b將所述修改數(shù)據(jù)所在行的時(shí)間戳字段的值設(shè)置為當(dāng)前的系統(tǒng)時(shí)間,表明所述數(shù)據(jù)是在全局參數(shù)表中的時(shí)間戳值對(duì)應(yīng)的時(shí)間增量抽取之后新修改的。c增量抽取數(shù)據(jù)表中的數(shù)據(jù)時(shí),只抽取每個(gè)數(shù)據(jù)表中時(shí)間戳值大于最近一次已抽取的時(shí)間戳值的數(shù)據(jù),即只抽取業(yè)務(wù)數(shù)據(jù)表中所在行的時(shí)間戳值大于全局參數(shù)表中的時(shí)間戳值的數(shù)據(jù)。如舉例中,新一次·增量抽取只抽取修改時(shí)間大于“2012-04-25 11:59:59”的數(shù)據(jù)。d將全局參數(shù)表中數(shù)據(jù)表的時(shí)間戳值更新為本次增量抽取的數(shù)據(jù)中最新的時(shí)間戳值,記錄的是本次增量抽取結(jié)束的時(shí)間,在此處理之后的修改數(shù)據(jù)所在行的時(shí)間戳值應(yīng)大于全局參數(shù)表中本次記錄的時(shí)間戳值。步驟三、刪除數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用日志記錄的方式,所述日志記錄的方式包括如下步驟I在業(yè)務(wù)系統(tǒng)中創(chuàng)建刪除日志表。所述刪除日志表的結(jié)構(gòu)如圖4所示,因數(shù)據(jù)表中的某一數(shù)據(jù)經(jīng)刪除后,此數(shù)據(jù)所在行的時(shí)間戳值和代理鍵值等信息也將被一起刪除,無(wú)法記錄,所以需在業(yè)務(wù)系統(tǒng)中創(chuàng)建一份刪除日志表,用來(lái)記錄刪除數(shù)據(jù)信息。圖4中所述“日志ID”為所述刪除日志表中添加的自增長(zhǎng)的代理鍵值。II將刪除數(shù)據(jù)所在數(shù)據(jù)表的表名和所在行的代理鍵值寫(xiě)入所述刪除日志表中,此目的是為了記錄所述刪除數(shù)據(jù)在業(yè)務(wù)數(shù)據(jù)庫(kù)表中的具體位置。圖4中所述的“主鍵ID”為步驟一中添加的所述代理鍵值,通過(guò)“表名”和“主鍵ID”的記錄,可以準(zhǔn)確地記錄所述刪除數(shù)據(jù)在數(shù)據(jù)庫(kù)表中的具體位置。III在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中,記錄每個(gè)數(shù)據(jù)表上次已處理的刪除記錄的最大代理鍵值。圖4中的“日志ID”是自增長(zhǎng)的代理鍵值,如圖5所示,在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中,記錄每個(gè)數(shù)據(jù)表上次已處理的刪除記錄的最大代理鍵值1056,即最大的日志ID值,目的是表明在全局參數(shù)表中,代理鍵值大于記錄的所述最大代理鍵值1056的刪除數(shù)據(jù)是未處理的新的刪除記錄。IV增量處理刪除記錄時(shí),只處理每個(gè)數(shù)據(jù)表中代理鍵值大于所述最大代理鍵值的刪除記錄對(duì)應(yīng)的數(shù)據(jù)。因?yàn)槊總€(gè)數(shù)據(jù)表中代理鍵值大于所述最大代理鍵值1056的刪除記錄是未處理的新的刪除記錄,所以在此次增量處理中,只需處理這些新的刪除記錄即可。V將數(shù)據(jù)倉(cāng)庫(kù)全局參數(shù)表中的最大代理鍵值更新為本次增量處理的數(shù)據(jù)中最大的代理鍵值。此目的是表明在本次增量處理后,代理鍵值大于本次新設(shè)的最大代理鍵值的刪除記錄是本次增量處理后新刪除的記錄,以便于管理員下次進(jìn)行處理。盡管本發(fā)明的實(shí)施方案已公開(kāi)如上,但其并不僅僅限于說(shuō)明書(shū)和實(shí)施方式中所列運(yùn)用,它完全可以被適用于各種適合本發(fā)明的領(lǐng)域,對(duì)于熟悉本領(lǐng)域的人員而言,可容易地實(shí)現(xiàn)另外的修改,因此在不背離權(quán)利要求及等同范圍所限定的一般概念下,本發(fā)明并不限于特定的細(xì)節(jié)和這里示出與描述的圖例。
權(quán)利要求
1.一種基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法,其特征在于,包括如下步驟 步驟一、為業(yè)務(wù)系統(tǒng)中的每個(gè)需要增量抽取數(shù)據(jù)的表增加一個(gè)自增長(zhǎng)的代理鍵字段和一個(gè)時(shí)間戳字段; 步驟二、新增或修改數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用時(shí)間戳的方式; 步驟三、刪除數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用日志記錄的方式。
2.如權(quán)利要求I所述的基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法,其特征在于,步驟二中所述的時(shí)間戳方式包括如下步驟 a在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中記錄每個(gè)數(shù)據(jù)表最近一次已抽取的時(shí)間戳值;b將所述修改數(shù)據(jù)所在行的時(shí)間戳字段的值設(shè)置為當(dāng)前的系統(tǒng)時(shí)間;c增量抽取數(shù)據(jù)表中的數(shù)據(jù)時(shí),只抽取每個(gè)數(shù)據(jù)表中時(shí)間戳值大于最近一次已抽取的時(shí)間戳值的數(shù)據(jù); d將全局參數(shù)表中數(shù)據(jù)表的時(shí)間戳值更新為本次增量抽取的數(shù)據(jù)中最新的時(shí)間戳值。
3.如權(quán)利要求I所述的基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法,其特征在于,步驟三中所述的日志記錄的方式包括如下步驟 I在系統(tǒng)中創(chuàng)建刪除日志表; II將刪除數(shù)據(jù)所在數(shù)據(jù)表的表名和所在行的代理鍵值寫(xiě)入所述刪除日志表中; III在數(shù)據(jù)倉(cāng)庫(kù)的全局參數(shù)表中,記錄每個(gè)數(shù)據(jù)表上次已處理的刪除記錄的最大代理鍵值; IV增量處理刪除記錄時(shí),只處理每個(gè)數(shù)據(jù)表中代理鍵值大于所述最大代理鍵值的刪除記錄對(duì)應(yīng)的數(shù)據(jù); V將數(shù)據(jù)倉(cāng)庫(kù)全局參數(shù)表中的最大代理鍵值更新為本次增量處理的數(shù)據(jù)中最大的代理鍵值。
全文摘要
本發(fā)明公開(kāi)了一種基于時(shí)間戳和日志的增量數(shù)據(jù)捕獲和抽取方法,包括如下步驟步驟一、為業(yè)務(wù)系統(tǒng)中的每個(gè)需要增量抽取數(shù)據(jù)的表增加一個(gè)自增長(zhǎng)的代理鍵字段和一個(gè)時(shí)間戳字段;步驟二、新增或修改數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用時(shí)間戳的方式;步驟三、刪除數(shù)據(jù)表中的數(shù)據(jù)時(shí),采用日志記錄的方式。使用本發(fā)明所述方法業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)可以是異構(gòu)的,業(yè)務(wù)數(shù)據(jù)庫(kù)和數(shù)據(jù)倉(cāng)庫(kù)允許只在抽取時(shí)處于連通狀態(tài),不必時(shí)時(shí)刻刻處于連通狀態(tài),每次只抽取上次抽取后未抽取的新增或修改的數(shù)據(jù),只處理上次處理后未處理的刪除的數(shù)據(jù),業(yè)務(wù)數(shù)據(jù)量較小,因此,本發(fā)明可以顯著提升數(shù)據(jù)的抽取效率,減輕抽取時(shí)對(duì)業(yè)務(wù)數(shù)據(jù)庫(kù)的壓力,降低抽取的技術(shù)復(fù)雜度。
文檔編號(hào)G06F17/30GK102915336SQ20121034792
公開(kāi)日2013年2月6日 申請(qǐng)日期2012年9月18日 優(yōu)先權(quán)日2012年9月18日
發(fā)明者施霖, 楊愛(ài)民 申請(qǐng)人:北京金和軟件股份有限公司