`
haitaohehe
  • 浏览: 12988 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

ETL增量抽取方式总结

阅读更多

ETL增量抽取方式 (简单总结下)

ETL增量抽取:

    要实现增量抽取,关键是如何准确快速的捕获变化的数据。优秀的增量抽取机制要求ETL能够将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成

太大的压力,影响现有业务。相对全量抽取而言,增量抽取的设计更复杂.

1、触发器方式

    触发器方式是普遍采取的一种增量抽取机制。该方式是根据抽取要求,在要被抽取的源表上建立插入、修改、删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将

变化的数据写入一个增量日志表,ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除。为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称、更新的关键字值和更新操作

类型(knsenupdatedelete)ETL增量抽取进程首先根据源表名称和更新的关键字值,从源表中提取对应的完整记录,再根据更新操作类型,对目标表进行相应的处理。

 

例如,对于源表为Oracle类型的数据库,采用触发器方式进行增量数据捕获的过程如下:

这样,对表T的所有DML操作就记录在增量日志表DML_LOG中,注意增量日志表中并没有完全记录增量数据本身,只是记录了增量数据的来源。进行增量ETL时,只需要根据增量日志表中的记录情况,反查源表得到真正的增量数据。

 

(1)创建增量日志表DML_LOG:

create table DML_LOG(

      ID NUMBER primary key, //自增主键

      TABLE NAME VARCHAR2(200). //源表名称

      RECORD ID NUMBER, //源表增量记录的主键值

      DML TYPE CH根(1)。∥增量类型,I表示新增:U表示更新;D表示删除

      EXECUTE DATE DATE //发生时间

);

(2)为DML_LOG创建一个序列SEQ_DML_LOG上,以便触发器写增量日志表时生成ID值。

(3)针对要监听的每一张表,创建一个触发器,例如对表Test创建触发器如下:

create Or replace trigger T BEFORE INSERT OR UPDATE

      OR DELETE ON T for each row

     declare 1 dml type varchar2(1);

     begin

          if INSERTING then l_dml type:='I’;

          elsif UPDATING then I_dml_type:=。tY;

          elsif DELETING then l_dml_type:='D’;

          endif;

         if DELETING then

              insert into DML_LOG(ID,TABLE_NAME,RECORD—

              ID,EXECUTE_DATE,DMLjYPE)

              values(seq_dml_log.nextval,’Test',:old.ID,sysdate,

              l_dml_type);

         else

              insert into DML_LOG(ID,TABLE_NAME,RECORD_

                   ID,EXECUTE_DATE,DMLjYPE)

               values(seq_dml_log.nextval,。Test',:new.ID,sysdate,L

                  tirol_type);

         endif;

         end;

 

 

2、时间戳方式

时间戳方式是指增量抽取时,抽取进程通过比较系统时间与抽取源表的时间戳字段的值来决定抽取哪些数据。这种方式需要在源表上增加一个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。有的数据库(例如Sql Server)的时间戳支持自动更新,即表的其它字段的数据发生改变时,时间戳字段的值会被自动更新为记录改变的时刻。在这种情下,进行ETL实施时就只需要在源表加上时间戳字段就可以了。对于不支持时间戳自动更新的数据库,这就要求业务系统在更新业务数据时,通过编程的方式手工更新时间戳字段。使用时间戳方式可以正常捕获源表的插入和更新操作,但对于删除操作则无能为力,需要结合其它机制才能完成。

 

更新时间戳:

3、全表删除插入方式

   全表删除插入方式是指每次抽取前先删除目标表数据,抽取时全新加载数据。该方式实际上将增量抽取等同于全量抽取。对于数据量不大,全量抽取的时间代价小于执行增量抽取的算法和条件代价时,可以采用该方式。

4、全表比对方式

     全表比对即在增量抽取时,ETL进程逐条比较源表和目标表的记录,将新增和修改的记录读取出来。优化之后的全部比对方式是采用MD5校验码,需要事先为要抽取的表建立一个结构类似的MD5临时表,该临时表记录源表的主键值以及根据源表所有字段的数据计算出来的

MD5校验码,每次进行数据抽取时,对源表和MD5临时表进行MD5校验码的比对,如有不同,进行update操作:如目标表没有存在该主键值,表示该记录还没有,则进行insert操作。

然后,还需要对在源表中已不存在而目标表仍保留的主键值,执行delete操作。

5、日志表方式

     对于建立了业务系统的生产数据库,可以在数据库中创建业务日志表,当特定需要监控的业务数据发生变化时,由相应的业务系统程序模块来更新维护日志表内容。增量抽取时,

通过读日志表数据决定加载哪些数据及如何加载。日志表的维护需要由业务系统程序用代码来完成。

6、系统日志分析方式

      该方式通过分析数据库自身的日志来判断变化的数据。关系犁数据库系统都会将所有的DML操作存储在日志文件中,以实现数据库的备份和还原功能。ETL增晕抽取进程通过对数据库的日志进行分析,提取对相关源表在特定时间后发生的DML操作信息,就可以得知自上次抽取时刻以来该表的数据变化情况,从而指导增量抽取动作。有些数据库系统提供了访问日志的专用的程序包(例如OracleLogMinder),使数据库日志的分析工作得到大大简化。

7、特定数据库方式(Oracle)
   以下介绍常见的针对特有数据库系统的增景抽取方式。
   7.1  Oracle改变数据捕获(changeddatacapture,CDC)方式:OracleCDC特性是在Oraele9i数据库中引入的。CDC能够帮助识别从上次抽取之后发生变化的数据。
利用CDC,在对源表进行insert、upclate或delete等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的数据,然后利用数据库视图以一种可控的方式提供给ETL抽取进程,作为增量抽取的依据。CDC方式对源表数据变化情况的捕获有两种方式:同步CDC和异步CDC。同步CDC使用源数据库触发器来捕获变更的数据。这种方式是实时的,没有任何延迟。当DML操作提交后,变更表中就产生了变更数据。异步CDC使用数据库重做日志(redolog)文件,在源数据库发生变更以后,才进行数据捕获。
    7.2   Oracle闪回查询方式:Oracle9i以上版本的数据库系统提供了闪回查询机制,允许用户查询过去某个时刻的数据库状态。这样,抽取进程可以将源数据库的
当前状态和上次抽取时刻的状态进行对比,快速得出源表数据记录的变化情况。

8、比较和分析

 

     可见,ETL在进行增量抽取操作时,有以上各种机制可以选择。现从兼容性、完备性、性能和侵入性3个方面对这些机制的优劣进行比较分析。数据抽取需要面对的源系统,并不一定都是关系型数据库系统。某个ETL过程需要从若干年前的遗留系统中抽取Excel或者CSV文本数据的情形是经常发牛的。这时,所有基于关系型数据库产品的增量机制都无法工作,时间戳方式和全表比对方式可能有一定的利用价值,在最坏的情况下,只有放弃增量抽取的思路,转而采用全表删除插入方式。完备性方面,时间戳方式不能捕获delete操作,需要结合其它方式一起使用。增量抽取的性能因素表现在两个方面,一是抽取进程本身的性能,二是对源系统性能的负面影响。触发器方式、日志表方式以及系统日志分析方式由于不需要在抽取过程中执行比对步骤,所以增量抽取的性能较佳。全表比对方式需要经过复杂的比对过程才能识别出更改的记录,抽取性能最差。在对源系统的性能影响方面,触发器方式由于是直接在源系统业务表上建立触发器,同时写临时表,对于频繁操作的业务系统可能会有一定的性能损失,尤其是当业务表上执行批量操作时,行级触发器将会对性能产生严重的影响;同步CDC方式内部采用触发器的方式实现,也同样存在性能影响的问题;全表比对方式和日志表方式对数据源系统数据库的性能没有任何影响,只是它们需要业务系统进行额外的运算和数据库操作,会有少许的时间损耗;时间戳方式、系统日志分析方式以及基于系统日志分析的方式(异步CDC和闪回查询)对数据库性能的影响也是非常小的。对数据源系统的侵入性是指业务系统是否要为实现增抽取机制做功能修改和额外操作,在这一点上,时间戳方式值得特别关注该方式除了要修改数据源系统表结构外,对于不支持时间戳字段自动更新的关系型数据库产品,还必须要修改业务系统的功能,让它在源表t执行每次操作时都要显式的更新表的时间戳字段,这在ETL实施过程中必须得到数据源系统高度的配合才能达到,并且在多数情况下这种要求在数据源系统看来是比较“过分”的,这也是时间戳方式无法得到广泛运用的主要原因。另外,触发器方式需要在源表上建立触发器,这种在某些场合中也遭到拒绝。还有一些需要建立临时表的方式,例如全表比对和日志表方式。可能因为开放给ETL进程的数据库权限的限制而无法实施。同样的情况也可能发生在基于系统日志分析的方式上,因为大多数的数据库产品只允许特定组的用户甚至只有DBA才能执行日志分析。闪回杏询在侵入性方面的影响是最小的。

各种数据增量抽取机制的优劣性综合分析如表l所示。

 

 

增量机制

兼容性

完备性

抽取性能

对源系统性能影响

对源系统倾入性

实现难度

触发器方式

关系型数据库

一般

较容易

时间戳方式

关系型数据库,具有“字段”结构的其它数据格式

较优

很小

较容易

全表删除插入方式

任何数据格式

极差

容易

全表比对方式

关系型数据库、文本格式

一般

一般

日志表方式

关系型数据库

较大

较容易

系统日志分析方式

关系型数据库

很小

较大

同步CDC方式

Oracle数据库9i以上     

一般

较难

异步CDC方式

Oracle数据库9i以上

很小

一般

较难

闪回查询方式

Oracle数据库9i以上

较优

很小

较容易

 

分享到:
评论

相关推荐

    ETL数据增量抽取方案

    ETL数据增量抽取方案,即Extraction, Transformation and Loading,是一种数据处理方法,主要用于数据仓库或数据集市的构建中,其作用是实现数据的集成,将企业内不同系统、不同格式的数据整合到一起,提供统一的...

    ETL增量抽取方案

    针对ETL增量抽取的方法进行了汇集,其中包括各种方法的优缺点,供大家参考。

    ETL中的数据增量抽取机制研究

    根据不同的应用场景和技术要求,数据增量抽取机制有很多种实现方式,常见的包括但不限于以下几种: 1. **时间戳方法**:利用源数据中的时间戳字段来判断数据是否发生了变化,从而确定哪些数据需要被抽取。 2. **...

    ETL抽取方式的详细介绍

    有关ETL抽取方式的详细介绍。 数据抽取是从数据源中抽取数据的过程。实际应用中,数据源采用较多的是关系数据库。 从数据库中抽取数据一般有一下几种方式。 1、全量抽取 ...2、增量抽取 。。。。。

    ETL数据增量抽取方案.pdf

    ### ETL数据增量抽取方案详解 #### 一、ETL简介及重要性 **ETL**(Extract, Transform, Load)是指从多个数据源抽取数据、转换数据格式并将其加载到目标系统的过程。随着公安行业的信息化建设不断推进,大量的业务...

    很全的ETL学习资料

    ETL增量抽取方式.docx ETL工具点评.docx ETL常见性能瓶颈.docx ETL构建企业级数据仓库五步法.docx ETL高级教程.docx 三大主流ETL工具选型.docx 什么是ETL.docx 商业智能 通过SSIS设计ETL来将Oracle,DB2,Sybase等数据...

    kettle增量抽取数据

    - 通过这种方式,可以确保增量抽取作业按照预设的时间间隔自动执行,进一步提升数据处理的自动化程度。 #### 四、总结 通过上述步骤,我们可以看到如何利用Kettle实现高效的增量数据抽取。这种方法不仅适用于...

    ETL数据增量抽取方案.zip

    在大数据时代,ETL的重要性日益凸显,特别是对于实时或近实时的数据处理,增量抽取成为一种高效的数据更新策略。 在“ETL数据增量抽取方案”中,我们将探讨如何使用Java实现这一功能。Java作为一种通用编程语言,...

    Kettle增量抽取数据实例.docx

    增量抽取是ETL过程中的一种优化策略,只处理自上次抽取以来发生更改的数据,而不是每次都全量处理所有数据。这种策略显著提高了效率,减少了对源系统和目标系统的压力,并节省了存储资源。 2. **Kettle增量抽取的...

    Kettle实现增量抽取数据

    增量抽取是从源系统中提取自上次抽取以来发生改变的新数据或更新数据,而不是每次全量抽取所有数据,这样可以显著提高效率并减少网络和存储资源的消耗。在这个案例中,我们不依赖时间戳,可能需要用到其他的追踪机制...

    ETL学习资料

    9.ETL增量抽取方式 10.三大主流ETL工具选型 11.商务智能(BI)的四大关键技术-ETL(抽取(Extract)、转换(Transform)和加载(Load)) 12.商业智能 通过SSIS设计ETL来将Oracle,DB2,Sybase等数据源的数据定期导入到数据仓库 ...

    数据增量抽取的解决方案

    而数据增量抽取作为ETL的一种优化策略,旨在提高数据处理效率,减少资源消耗,保证数据的实时性和准确性。 ### 数据增量抽取的重要性 数据增量抽取是指在数据仓库中只抽取自上次加载以来发生变更的数据记录,而...

    informatica简单增量抽取

    ### Informatica简单增量抽取知识点详解 #### 一、概述 Informatica是一款强大的ETL(Extract, Transform, Load)工具,广泛应用于数据集成场景。增量抽取是数据仓库建设中的一项关键技术,用于只抽取自上次处理以来...

    etl数据抽取

    ### ETL 数据抽取详解 #### 一、ETL 概述 ETL 是 Extract-Transform-Load 的缩写,指的是数据抽取、转换、装载的过程。它是一种常用的将数据从源系统移动到目标系统的数据集成方法。ETL 过程通常涉及从多个数据源...

    4-ETL事实表增量抽取.avi

    4-ETL事实表增量抽取.avi

    Informatica增量抽取.docx

    【Informatica增量抽取详解】 Informatica是一款强大的数据集成工具,广泛应用于数据仓库和大数据环境中的数据抽取、转换和加载(ETL)过程。增量抽取是数据仓库管理中的关键概念,它允许只处理自上次提取以来发生...

    ETL数据抽取方案

    在ETL过程中,数据抽取是整个流程的基础,常见的抽取方式有两种:全量抽取和增量抽取。 ##### 1. 全量抽取 - **定义**:全量抽取是指将数据源中的所有数据一次性完整地抽取到目标系统中。 - **应用场景**:通常在...

    ETL增量原理

    ETL增量处理有多种实现方式: 1. 触发器触发:在数据源端设置触发器,当数据发生变化时,触发ETL过程。这种方式实时性好,但可能增加数据库负担,不适合大规模数据处理。 2. 定时任务扫描:定时检查数据源是否有新...

Global site tag (gtag.js) - Google Analytics