專利名稱::一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域:
,尤其涉及一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法。
背景技術(shù):
:數(shù)據(jù)倉(cāng)庫(kù)ETL(Extract-Transformation-Load)包括數(shù)據(jù)的抽取、轉(zhuǎn)換、加載,其中①數(shù)據(jù)抽取從源數(shù)據(jù)源系統(tǒng)抽取目的數(shù)據(jù)源系統(tǒng)需要的數(shù)據(jù)②數(shù)據(jù)轉(zhuǎn)換將從源數(shù)據(jù)源獲取的數(shù)據(jù)按照業(yè)務(wù)需求,轉(zhuǎn)換成目的數(shù)據(jù)源要求的形式,并對(duì)錯(cuò)誤、不一致的數(shù)據(jù)進(jìn)行清洗和加工;③數(shù)據(jù)加載將轉(zhuǎn)換后的數(shù)據(jù)裝載到目的數(shù)據(jù)源。在ETL的3個(gè)環(huán)節(jié)中,數(shù)據(jù)抽取直接面對(duì)各種分散、異構(gòu)的數(shù)據(jù)源,如何保證穩(wěn)定高效的從這些數(shù)據(jù)源中提取正確的數(shù)據(jù),是ETL設(shè)計(jì)和實(shí)施過(guò)程中需要考慮的關(guān)鍵問(wèn)題之一。在集成端進(jìn)行數(shù)據(jù)的初始化時(shí),一般需要將數(shù)據(jù)源端的全部數(shù)據(jù)裝載進(jìn)來(lái),這時(shí)需要進(jìn)行全量抽取。全量抽取類似于數(shù)據(jù)遷移或數(shù)據(jù)復(fù)制,它將數(shù)據(jù)源中的表或視圖的數(shù)據(jù)全部從數(shù)據(jù)庫(kù)中抽取出來(lái),再進(jìn)行后續(xù)的轉(zhuǎn)換和加載操作。全量抽取可以使用數(shù)據(jù)復(fù)制、導(dǎo)入或者備份的方式完成,實(shí)現(xiàn)機(jī)制比較簡(jiǎn)單。全量抽取完成后,后續(xù)的抽取操作只需抽取自上次抽取以來(lái)表中新增或修改的數(shù)據(jù),這就是增量抽取。而增量抽取的難點(diǎn)之一在于實(shí)現(xiàn)變化數(shù)據(jù)的捕獲機(jī)制,也即是說(shuō)要有這樣一種機(jī)制能夠保證在數(shù)據(jù)源數(shù)據(jù)有變化的時(shí)候能夠區(qū)分出這些變化的新數(shù)據(jù)和舊數(shù)據(jù),這樣我們才能夠增量的抽取這些變化了的數(shù)據(jù),而無(wú)需為了保證數(shù)據(jù)的同步每次都做全量的抽取。在數(shù)據(jù)庫(kù)倉(cāng)庫(kù)中,無(wú)論是全量抽取還是增量抽取,抽取工作一般由數(shù)據(jù)倉(cāng)庫(kù)工具來(lái)完成,如oracle的OWB,SqlServer的IntegrationServices以及專業(yè)的ETL商業(yè)產(chǎn)品InformaticaPowvrCenter等。這些工具都有一個(gè)特點(diǎn),就是本身并沒(méi)有實(shí)現(xiàn)特定的增量抽取機(jī)制,它們完成全量抽取后,用戶可以通過(guò)定制計(jì)劃任務(wù)的方式,實(shí)現(xiàn)按一定的周期從源系統(tǒng)中抽取當(dāng)前周期內(nèi)產(chǎn)生的增量數(shù)據(jù),但至于這些增量數(shù)據(jù)如何產(chǎn)生,工具并沒(méi)有提供自動(dòng)生成增量數(shù)據(jù)的功能。所以,ETL過(guò)程中增量數(shù)據(jù)的產(chǎn)生機(jī)制是一個(gè)需要用戶重點(diǎn)研究和選擇的問(wèn)題。
發(fā)明內(nèi)容本發(fā)明為克服現(xiàn)有技術(shù)中存在的不足之處,目的在于提供一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,該方法將業(yè)務(wù)系統(tǒng)中的變化數(shù)據(jù)按一定的頻率準(zhǔn)確地捕獲到,同時(shí)不能對(duì)業(yè)務(wù)系統(tǒng)造成太大的壓力,影響現(xiàn)有業(yè)務(wù)。同時(shí),用戶可以通過(guò)定制計(jì)劃任務(wù)的方式,實(shí)現(xiàn)按一定的周期從源系統(tǒng)中抽取當(dāng)前周期內(nèi)產(chǎn)生的增量數(shù)據(jù),或者可以通過(guò)采用系統(tǒng)提供的實(shí)時(shí)檢測(cè)變化數(shù)據(jù)的方式,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)同步的能力,成功地解決了現(xiàn)有技術(shù)中存在的問(wèn)題。本發(fā)明是通過(guò)以下技術(shù)方案達(dá)到上述目的一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,包括如下步驟1)確定數(shù)據(jù)來(lái)源表作為抽取表;2)定義暫存抽取表中數(shù)據(jù)變化的中間表;3)定義針對(duì)抽取表數(shù)據(jù)發(fā)生變化規(guī)則的觸發(fā)器;4)探測(cè)抽取表是否有數(shù)據(jù)變化,建立的觸發(fā)器將變化數(shù)據(jù)捕獲到中間表中;5)啟動(dòng)數(shù)據(jù)交換任務(wù)的執(zhí)行,ETL增量抽取進(jìn)程根據(jù)中間表記載的變化數(shù)據(jù),從抽取表中提取對(duì)應(yīng)的完整記錄,對(duì)目標(biāo)表進(jìn)行相應(yīng)的處理。6)執(zhí)行完任務(wù),將一個(gè)游標(biāo)存放當(dāng)前中間表中最新更新時(shí)間,確定每次抽取的起始游標(biāo);7)定時(shí)刪除中間表已處理過(guò)的臨時(shí)數(shù)據(jù)。作為優(yōu)選,步驟5)所述的啟動(dòng)數(shù)據(jù)交換任務(wù)的執(zhí)行可通過(guò)手工啟動(dòng)方式、定時(shí)調(diào)度方式及實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)變化并啟動(dòng)的方式進(jìn)行。作為優(yōu)選,中間表存儲(chǔ)抽取表名稱、更新的關(guān)鍵字值和更新操作類型。作為優(yōu)選,中間表關(guān)鍵字段需要建立索引。本發(fā)明的有益效果本發(fā)明提供一種變化數(shù)據(jù)的捕獲機(jī)制,也即是說(shuō)這種機(jī)制能夠保證在數(shù)據(jù)源數(shù)據(jù)有變化的時(shí)候能夠區(qū)分出這些變化的新數(shù)據(jù)和舊數(shù)據(jù),增量的抽取這些變化了的數(shù)據(jù),而無(wú)需為了保證數(shù)據(jù)的同步每次都做全量的抽取。本發(fā)明對(duì)所有有觸發(fā)器機(jī)制的數(shù)據(jù)庫(kù)都適用,除了創(chuàng)建觸發(fā)器及中間表的邏輯因數(shù)據(jù)庫(kù)的不同而不同以外,主干抽取邏輯都一致,代碼的可復(fù)用程度高,數(shù)據(jù)抽取的性能較尚ο圖1是數(shù)據(jù)增量抽取的處理流程圖2是實(shí)施例1中增量抽取設(shè)置欄的示意圖。具體實(shí)施例方式實(shí)施例1下面結(jié)合具體實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步描述,但本發(fā)明的保護(hù)范圍并不僅限于此以下以oracle數(shù)據(jù)庫(kù)為例來(lái)闡述整個(gè)的擴(kuò)展流程(SqlServer或其他數(shù)據(jù)庫(kù)與之類似)。詳細(xì)描述中給出了許多具體細(xì)節(jié),以確保對(duì)本發(fā)明實(shí)例的透徹理解,對(duì)于知道本領(lǐng)域基本常識(shí)的人,能夠理解沒(méi)有這些具體細(xì)節(jié),本發(fā)明的實(shí)例也能實(shí)現(xiàn)。另外,沒(méi)有詳細(xì)描述眾所周知的方法、過(guò)程、部件,以避免本發(fā)明的實(shí)現(xiàn)變得不清楚。第一階段抽取表的實(shí)現(xiàn)以下是一個(gè)簡(jiǎn)單的抽取表結(jié)構(gòu),只包含2個(gè)字段,其中ID為主鍵,這里要說(shuō)明的是,使用基于觸發(fā)器的增量抽取方式抽取表必須要有主鍵,程序中要對(duì)這個(gè)加以條件限制。C^sSt&t^ibl^.createtableTRIGGERTEST(IDNVlfBERnot-null^NlUfEinABCHnK2(10))tablespaceUSEESpetfree10±nxt-rans1maxtrans2SSstorageInitial64K一一Cr^iSt^/R^crestaprimsun±qu^.^ndfor^igrikeyoosf2strszntsaltertableTRI&GEHTESTaddconstraintPK_ID一TRIGGERprxirkarjrkey(ID)usinqxiulextablespaceUSERSpetfree10Ιχιtrans2rnaxtT^jisZSSstorageinitial64K第二階段中間表實(shí)現(xiàn)中間表的作用就是暫存抽取表中的變化數(shù)據(jù)(CDC),換句話說(shuō)就是通過(guò)觸發(fā)器發(fā)現(xiàn)變化數(shù)據(jù),然后將變化數(shù)據(jù)插入中間表中,以備增量抽取時(shí)使用。以下是基于上面的抽取表建立的一個(gè)中間表,這里對(duì)這個(gè)中間表作下說(shuō)明首先中間表表名統(tǒng)一規(guī)定為“SJJH_”+抽取表表名。中間表字段主要分為三類。第一類為抽取表主鍵類字段,如抽取表主鍵為ID,則在中間表中也要有相應(yīng)的ID字段;第二類為操作類型字段,字段類型在oracle中為Varchar(I),字段內(nèi)容為{‘I,,,U,,,D,}其中之一,其中I代表Insert操作、U代表Update操作,D代表Delete操作;最后一類就是發(fā)生該操作的操作時(shí)間字段,這里使用的類型為Date字段,精確到秒,在程序?qū)崿F(xiàn)時(shí)最好可以實(shí)現(xiàn)精確到毫秒。最后要說(shuō)明下的是中間表的建立在程序?qū)崿F(xiàn)時(shí)建立在觸發(fā)器之前,因?yàn)橛|發(fā)器中引用了該中間表,再者,因?yàn)橹虚g表需要與抽取表進(jìn)行聯(lián)合查詢來(lái)抽取數(shù)據(jù),為了提高抽取sql的執(zhí)行效率,必須對(duì)中間表某些字段建立索引,這里對(duì)中間表的ID字段和0PERTIME字段建立了索引。第三階段觸發(fā)器與上述中間表的建立類似,程序中必須有自動(dòng)建立觸發(fā)器的機(jī)制(在交換任務(wù)部署的時(shí)候)。觸發(fā)器的名稱統(tǒng)一為T_SJJH_+抽取表名。以下是建立的oracle行觸發(fā)器通過(guò)該觸發(fā)器,當(dāng)抽取表發(fā)生DML操作的時(shí)候,觸發(fā)器會(huì)自動(dòng)向中間表插入變化的數(shù)據(jù),并且通過(guò){‘I’,’U’,’D’}操作符來(lái)區(qū)分增刪改等操作。第四階段程序擴(kuò)展第一類D印hi客戶端的改造在增量抽取設(shè)置一欄,增加一個(gè)基于觸發(fā)器的增量抽取方案,可以選擇數(shù)據(jù)庫(kù)類型,目前打算實(shí)現(xiàn)的是oracle及sqlserver兩種類型。第二類服務(wù)端程序的改造服務(wù)端程序大的改造點(diǎn)有2塊,其他一些小的嵌入框架的不會(huì)對(duì)整個(gè)結(jié)構(gòu)造成影響的部分就不提了。任務(wù)部署和反部署時(shí)自動(dòng)創(chuàng)建中間表觸發(fā)器部分的改造因?yàn)閯?chuàng)建中間表和觸發(fā)器因不同的數(shù)據(jù)庫(kù)不同而有所區(qū)別,故這段改造邏輯在DialectDb中實(shí)現(xiàn),可以在DialectDb中定義公用代碼模板,不同的數(shù)據(jù)庫(kù)子類實(shí)現(xiàn)個(gè)性化的代碼,目前代碼模板已基本實(shí)現(xiàn),請(qǐng)參看如下所示首先看下任務(wù)部署代碼上述模板方法顯示的是一個(gè)部署模板方法,對(duì)所有數(shù)據(jù)庫(kù)的部署環(huán)境都適用,其中需子類定制的方法有4個(gè),分別如下所示下面的是反部署模板方法程序?qū)σ陨献宇惙椒▽?shí)現(xiàn)好后,在框架相應(yīng)的部分通過(guò)委派的方式調(diào)用相應(yīng)的這2個(gè)部署和反部署方法就可以實(shí)現(xiàn)自動(dòng)創(chuàng)建觸發(fā)器增量抽取環(huán)境的代碼了。以上的所述乃是本發(fā)明的具體實(shí)施例及所運(yùn)用的技術(shù)原理,若依本發(fā)明的構(gòu)想所作的改變,其所產(chǎn)生的功能作用仍未超出說(shuō)明書(shū)及附圖所涵蓋的精神時(shí),仍應(yīng)屬本發(fā)明的保護(hù)范圍。權(quán)利要求一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,其特征在于包括如下步驟1)確定數(shù)據(jù)來(lái)源表作為抽取表;2)定義暫存抽取表中數(shù)據(jù)變化的中間表;3)定義針對(duì)抽取表數(shù)據(jù)發(fā)生變化規(guī)則的觸發(fā)器;4)探測(cè)抽取表是否有數(shù)據(jù)變化,建立的觸發(fā)器將變化數(shù)據(jù)捕獲到中間表中;5)啟動(dòng)數(shù)據(jù)交換任務(wù)的執(zhí)行,ETL增量抽取進(jìn)程根據(jù)中間表記載的變化數(shù)據(jù),從抽取表中提取對(duì)應(yīng)的完整記錄,對(duì)目標(biāo)表進(jìn)行相應(yīng)的處理;6)執(zhí)行完任務(wù),將一個(gè)游標(biāo)存放當(dāng)前中間表中最新更新時(shí)間,確定每次抽取的起始游標(biāo);7)定時(shí)刪除中間表已處理過(guò)的臨時(shí)數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,其特征在于,所述的步驟5)所述的啟動(dòng)數(shù)據(jù)交換任務(wù)的執(zhí)行可通過(guò)手工啟動(dòng)方式、定時(shí)調(diào)度方式及實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)變化并啟動(dòng)的方式進(jìn)行。3.根據(jù)權(quán)利要求1所述的一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,其特征在于,中間表存儲(chǔ)抽取表名稱、更新的關(guān)鍵字值和更新操作類型。4.根據(jù)權(quán)利要求1或2所述的一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,其特征在于,中間表關(guān)鍵字段需要建立索引。全文摘要本發(fā)明涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域:
,尤其涉及一種基于觸發(fā)器的數(shù)據(jù)增量抽取方法,該方法將業(yè)務(wù)系統(tǒng)中的變化數(shù)據(jù)按一定的頻率準(zhǔn)確地捕獲到,同時(shí)不能對(duì)業(yè)務(wù)系統(tǒng)造成太大的壓力,影響現(xiàn)有業(yè)務(wù)。同時(shí),用戶可以通過(guò)定制計(jì)劃任務(wù)的方式,實(shí)現(xiàn)按一定的周期從源系統(tǒng)中抽取當(dāng)前周期內(nèi)產(chǎn)生的增量數(shù)據(jù),或者可以通過(guò)采用系統(tǒng)提供的實(shí)時(shí)檢測(cè)變化數(shù)據(jù)的方式,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)同步的能力。本發(fā)明的有益效果本發(fā)明提供一種變化數(shù)據(jù)的捕獲機(jī)制,也即是說(shuō)這種機(jī)制能夠保證在數(shù)據(jù)源數(shù)據(jù)有變化的時(shí)候能夠區(qū)分出這些變化的新數(shù)據(jù)和舊數(shù)據(jù),增量的抽取這些變化了的數(shù)據(jù),而無(wú)需為了保證數(shù)據(jù)的同步每次都做全量的抽取。文檔編號(hào)G06F17/30GK101923566SQ20101021010公開(kāi)日2010年12月22日申請(qǐng)日期2010年6月24日優(yōu)先權(quán)日2010年6月24日發(fā)明者肖榕申請(qǐng)人:浙江協(xié)同數(shù)據(jù)系統(tǒng)有限公司