欢迎来到天天文库
浏览记录
ID:42991990
大小:33.65 KB
页数:5页
时间:2019-09-24
《ETL数据增量抽取机制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ETL中的数据增量抽取机制【摘要】:为实现数据仓库中数据的高效更新,探讨在数据仓库的ETL(数据的抽取、转换和装载)子系统中进行数据增量抽取时所采用的常见机制,对这些机制的原理,条件,方法以及运行效率等方面进行了详细的阐述,并从兼容性,完备性、性能和侵入性4个方面分析和比较了各种数据增量抽取机制的优劣性。最后,总结了选取数据增量抽取机制所应遵循的主要原则和标准。关键词:数据抽取转换与加载;增量抽取;数据仓库;商业智能0引言增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取、转换和装载)实施过程中需要重点考虑的问题。在ET
2、L过程中,增量更新的效率和可行性是决定ETL实施成败的关键问题之一,ETL中的增量更新机制比较复杂,采用何种机制往往取决于源数据系统的类型以及对增量更新性能的要求。本文重点对各种方法进行对比分析,从而总结各种机制的使用条件和优劣性,为数据仓库项目中ETL工程的实施提供增量抽取技术选型方面的参考。1ETL概述ETL包括数据的抽取、转换、加载。①数据抽取:从源数据源系统抽取目标数据源系统需要的数据;②数据转换:将从源数据源获取的数据按照业务需求,转换成目标数据源要求的形式,并对错误、不一致的数据进行清洗和加工;③数据加载:将转换后的数据装载到目的数据源。ETL作为构建数据仓库的
3、一个环节,负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。ETL原来主要用于构建数据仓库和商业智能项目,现在也越来越多地应用于一般信息系统数据的迁移、交换和同步。在ETL的3个环节中,数据抽取直接面对各种分散、异构的数据源,如何保证稳定高效的从这些数据源中提取正确的数据,是ETL设计和实施过程中需要考虑的关键问题之一。在集成端进行数据的初始化时,一般需要将数据源端的全部数据装载进来,这时需要进行全量抽取。全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图
4、的数据全部从数据库中抽取出来,再进行后续的转换和加载操作。全量抽取可以使用数据复制、导入或者备份的方式完成,实现机制比较简单。全量抽取完成后,后续的抽取操作只需抽取自上次抽取以来表中新增或修改的数据,这就是增量抽取。在数据库仓库中,无论是全量抽取还是增量抽取,抽取工作一般由数据仓库工具来完成,如oracle的OWB,SqlServer的IntegrationServices以及专业的ETL商业产品InformaticalPowerCenter等。如果企业的预算有限,也可以考虑使用开源项目Pentaho。这些工具都有一个特点,就是本身并没有实现特定的增量抽取机制,它们完成全量
5、抽取后,用户可以通过定制计划任务的方式,实现按一定的周期从源系统中抽取当前周期内产生的增量数据,但至于这些增量数据如何产生,工具并没有提供自动生成增量数据的功能。所以,ETL过程中增量数据的产生机制是一个需要用户重点研究和选择的问题。下面讨论各种增量抽取的实现机制原理。2增量抽取机制要实现增量抽取,关键是如何准确快速的捕获变化的数据。优秀的增量抽取机制要求ETL能够将业务系统中的变化数据按一定的频率准确地捕获到,同时不能对业务系统造成太大的压力,影响现有业务。相对全量抽取而言,增量抽取的设计更复杂,增量数据抽取中常用的捕获变化数据的方法有以下几种:2.1触发器方式触发器方式
6、是普遍采取的一种增量抽取机制。该方式是根据抽取要求,在要被抽取的源表上建立插入、修改、删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表,ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除。为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称、更新的关键字值和更新操作类型(insert、update或delete),ETL增量抽取进程首先根据源表名称和更新的关键字值,从源表中提取对应的完整记录,再根据更新操作类型,对目标表进行相应的处理。例如,对于源表为O
7、racle类型的数据库,采用触发器方式进行增量数据捕获的过程如下:(1)创建增量日志表DML_LOG:createtableDML_LOG(IDNUMBERprimarykey,//自增主键TABLENAMEVARCHAR2(200),//源表名称RECORD_IDNUMBER,//源表增量记录的主键值DML_TYPECHAR(1),//增量类型,I表示新增:U表示更新;D表示删除EXECUTE_DATEDATE//发生时间);(2)为DML_LOG创建一个序列SEQ_DML_LOG,以便触发器写增量日志表时生成I
此文档下载收益归作者所有