专利名称::一种基于触发器的数据增量抽取方法
技术领域:
:本发明涉及数据处理
技术领域:
,尤其涉及一种基于触发器的数据增量抽取方法。
背景技术:
:数据仓库ETL(Extract-Transformation-Load)包括数据的抽取、转换、加载,其中①数据抽取从源数据源系统抽取目的数据源系统需要的数据②数据转换将从源数据源获取的数据按照业务需求,转换成目的数据源要求的形式,并对错误、不一致的数据进行清洗和加工;③数据加载将转换后的数据装载到目的数据源。在ETL的3个环节中,数据抽取直接面对各种分散、异构的数据源,如何保证稳定高效的从这些数据源中提取正确的数据,是ETL设计和实施过程中需要考虑的关键问题之一。在集成端进行数据的初始化时,一般需要将数据源端的全部数据装载进来,这时需要进行全量抽取。全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据全部从数据库中抽取出来,再进行后续的转换和加载操作。全量抽取可以使用数据复制、导入或者备份的方式完成,实现机制比较简单。全量抽取完成后,后续的抽取操作只需抽取自上次抽取以来表中新增或修改的数据,这就是增量抽取。而增量抽取的难点之一在于实现变化数据的捕获机制,也即是说要有这样一种机制能够保证在数据源数据有变化的时候能够区分出这些变化的新数据和旧数据,这样我们才能够增量的抽取这些变化了的数据,而无需为了保证数据的同步每次都做全量的抽取。在数据库仓库中,无论是全量抽取还是增量抽取,抽取工作一般由数据仓库工具来完成,如oracle的OWB,SqlServer的IntegrationServices以及专业的ETL商业产品InformaticaPowvrCenter等。这些工具都有一个特点,就是本身并没有实现特定的增量抽取机制,它们完成全量抽取后,用户可以通过定制计划任务的方式,实现按一定的周期从源系统中抽取当前周期内产生的增量数据,但至于这些增量数据如何产生,工具并没有提供自动生成增量数据的功能。所以,ETL过程中增量数据的产生机制是一个需要用户重点研究和选择的问题。
发明内容本发明为克服现有技术中存在的不足之处,目的在于提供一种基于触发器的数据增量抽取方法,该方法将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成太大的压力,影响现有业务。同时,用户可以通过定制计划任务的方式,实现按一定的周期从源系统中抽取当前周期内产生的增量数据,或者可以通过采用系统提供的实时检测变化数据的方式,实现实时数据同步的能力,成功地解决了现有技术中存在的问题。本发明是通过以下技术方案达到上述目的一种基于触发器的数据增量抽取方法,包括如下步骤1)确定数据来源表作为抽取表;2)定义暂存抽取表中数据变化的中间表;3)定义针对抽取表数据发生变化规则的触发器;4)探测抽取表是否有数据变化,建立的触发器将变化数据捕获到中间表中;5)启动数据交换任务的执行,ETL增量抽取进程根据中间表记载的变化数据,从抽取表中提取对应的完整记录,对目标表进行相应的处理。6)执行完任务,将一个游标存放当前中间表中最新更新时间,确定每次抽取的起始游标;7)定时删除中间表已处理过的临时数据。作为优选,步骤5)所述的启动数据交换任务的执行可通过手工启动方式、定时调度方式及实时监控数据变化并启动的方式进行。作为优选,中间表存储抽取表名称、更新的关键字值和更新操作类型。作为优选,中间表关键字段需要建立索引。本发明的有益效果本发明提供一种变化数据的捕获机制,也即是说这种机制能够保证在数据源数据有变化的时候能够区分出这些变化的新数据和旧数据,增量的抽取这些变化了的数据,而无需为了保证数据的同步每次都做全量的抽取。本发明对所有有触发器机制的数据库都适用,除了创建触发器及中间表的逻辑因数据库的不同而不同以外,主干抽取逻辑都一致,代码的可复用程度高,数据抽取的性能较尚ο图1是数据增量抽取的处理流程图2是实施例1中增量抽取设置栏的示意图。具体实施例方式实施例1下面结合具体实施例对本发明进行进一步描述,但本发明的保护范围并不仅限于此以下以oracle数据库为例来阐述整个的扩展流程(SqlServer或其他数据库与之类似)。详细描述中给出了许多具体细节,以确保对本发明实例的透彻理解,对于知道本领域基本常识的人,能够理解没有这些具体细节,本发明的实例也能实现。另外,没有详细描述众所周知的方法、过程、部件,以避免本发明的实现变得不清楚。第一阶段抽取表的实现以下是一个简单的抽取表结构,只包含2个字段,其中ID为主键,这里要说明的是,使用基于触发器的增量抽取方式抽取表必须要有主键,程序中要对这个加以条件限制。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第二阶段中间表实现中间表的作用就是暂存抽取表中的变化数据(CDC),换句话说就是通过触发器发现变化数据,然后将变化数据插入中间表中,以备增量抽取时使用。以下是基于上面的抽取表建立的一个中间表,这里对这个中间表作下说明首先中间表表名统一规定为“SJJH_”+抽取表表名。中间表字段主要分为三类。第一类为抽取表主键类字段,如抽取表主键为ID,则在中间表中也要有相应的ID字段;第二类为操作类型字段,字段类型在oracle中为Varchar(I),字段内容为{‘I,,,U,,,D,}其中之一,其中I代表Insert操作、U代表Update操作,D代表Delete操作;最后一类就是发生该操作的操作时间字段,这里使用的类型为Date字段,精确到秒,在程序实现时最好可以实现精确到毫秒。最后要说明下的是中间表的建立在程序实现时建立在触发器之前,因为触发器中引用了该中间表,再者,因为中间表需要与抽取表进行联合查询来抽取数据,为了提高抽取sql的执行效率,必须对中间表某些字段建立索引,这里对中间表的ID字段和0PERTIME字段建立了索引。第三阶段触发器与上述中间表的建立类似,程序中必须有自动建立触发器的机制(在交换任务部署的时候)。触发器的名称统一为T_SJJH_+抽取表名。以下是建立的oracle行触发器通过该触发器,当抽取表发生DML操作的时候,触发器会自动向中间表插入变化的数据,并且通过{‘I’,’U’,’D’}操作符来区分增删改等操作。第四阶段程序扩展第一类D印hi客户端的改造在增量抽取设置一栏,增加一个基于触发器的增量抽取方案,可以选择数据库类型,目前打算实现的是oracle及sqlserver两种类型。第二类服务端程序的改造服务端程序大的改造点有2块,其他一些小的嵌入框架的不会对整个结构造成影响的部分就不提了。任务部署和反部署时自动创建中间表触发器部分的改造因为创建中间表和触发器因不同的数据库不同而有所区别,故这段改造逻辑在DialectDb中实现,可以在DialectDb中定义公用代码模板,不同的数据库子类实现个性化的代码,目前代码模板已基本实现,请参看如下所示首先看下任务部署代码上述模板方法显示的是一个部署模板方法,对所有数据库的部署环境都适用,其中需子类定制的方法有4个,分别如下所示下面的是反部署模板方法程序对以上子类方法实现好后,在框架相应的部分通过委派的方式调用相应的这2个部署和反部署方法就可以实现自动创建触发器增量抽取环境的代码了。以上的所述乃是本发明的具体实施例及所运用的技术原理,若依本发明的构想所作的改变,其所产生的功能作用仍未超出说明书及附图所涵盖的精神时,仍应属本发明的保护范围。权利要求一种基于触发器的数据增量抽取方法,其特征在于包括如下步骤1)确定数据来源表作为抽取表;2)定义暂存抽取表中数据变化的中间表;3)定义针对抽取表数据发生变化规则的触发器;4)探测抽取表是否有数据变化,建立的触发器将变化数据捕获到中间表中;5)启动数据交换任务的执行,ETL增量抽取进程根据中间表记载的变化数据,从抽取表中提取对应的完整记录,对目标表进行相应的处理;6)执行完任务,将一个游标存放当前中间表中最新更新时间,确定每次抽取的起始游标;7)定时删除中间表已处理过的临时数据。2.根据权利要求1所述的一种基于触发器的数据增量抽取方法,其特征在于,所述的步骤5)所述的启动数据交换任务的执行可通过手工启动方式、定时调度方式及实时监控数据变化并启动的方式进行。3.根据权利要求1所述的一种基于触发器的数据增量抽取方法,其特征在于,中间表存储抽取表名称、更新的关键字值和更新操作类型。4.根据权利要求1或2所述的一种基于触发器的数据增量抽取方法,其特征在于,中间表关键字段需要建立索引。全文摘要本发明涉及数据处理
技术领域:
,尤其涉及一种基于触发器的数据增量抽取方法,该方法将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成太大的压力,影响现有业务。同时,用户可以通过定制计划任务的方式,实现按一定的周期从源系统中抽取当前周期内产生的增量数据,或者可以通过采用系统提供的实时检测变化数据的方式,实现实时数据同步的能力。本发明的有益效果本发明提供一种变化数据的捕获机制,也即是说这种机制能够保证在数据源数据有变化的时候能够区分出这些变化的新数据和旧数据,增量的抽取这些变化了的数据,而无需为了保证数据的同步每次都做全量的抽取。文档编号G06F17/30GK101923566SQ20101021010公开日2010年12月22日申请日期2010年6月24日优先权日2010年6月24日发明者肖榕申请人:浙江协同数据系统有限公司