DSG-ETLplus数据实时抽取转换软件
时间:2010-06-06 来源:吴险
DSG-ETLplus数据实时抽取转换产品
1 ETL抽取现状 在目前的ETL抽取机制中,一般有以下几种限制条件: (1)ETL抽取频率为1天一次 无论是ETL直接从生产数据库中读取数据,还是通过生成数据文件的方式来传输数据。其频率一般都是每天进行一次。因为无论是直接抽取还是生成数据文件,都只能选择在夜间业务量较小的时间段完成。 (2)无法有效处理增量数据识别问题 按照ETL的设计原理,每天从生产系统抽取数据最好是当天的变化数据,这样能大幅度缩短抽取时间,将对生产系统的性能影响降到最低。为了实现增量数据的抽取,就必须具备识别增量数据的条件,通常的做法包括: a) 通过生产系统中的table中的某个字段来表示该数据是否发生了改变,以及发生改变的日期; b) 在生产系统中的table上增加timestamp字段,用来记录该条记录发生变化的时间; c) 由应用厂商来根据业务逻辑判断,将当天的改变数据自动生成接口文件。 以上三种方式不能适合所有的情况,尤其是那些经常进行UPDATE的操作的表更是难以处理。 不得以,很对用户的ETL对那些无法识别增量的table进行每天一次全量抽取,通过全量数据来和前一次抽取的数据之间进行比较来判断数据的增、删、改。 这种方式最大的问题在于: (1) 每天抽取的数据量过于庞大。每天上亿到几十亿条记录都重新处理将占用大量资源和时间; (2) 每次的抽取对生产系统占用大量的资源,严重影响到生产系统的正常运行。 1.1 实时ETL抽取改造目标 因此,数据抽取领域需要一个ETL抽取增强的解决方案,以期望达到以下目标: (1) 解决目前需要应用厂商提供接口文件的复杂程度,以及需要每天对update的记录进行全表抽取所带来的问题 (2) 为未来更加实时的ETL抽取奠定基础,例如将来可实现每几分钟、10分钟的抽取间隔; (3) 降低ETL抽取对生产系统的性能影响 (4) 避免每天的全量数据处理 (5) 提供增量识别机制 2 DSG ETLPlus解决方案概要 DSG ETLPlus解决方案的目的是为ETL工具提供一个增量实时数据抽取解决方案。 该工具利用对生产系统ORACLE redo log的跟踪机制,来对生产系统的数据进行变化跟踪,然后将跟踪到的变化数据传输到中间数据库上,在中间数据上对数据进行整合、过滤和判断,并且生产数据接口,将接口文件提供给ETL工具使用。 ETL软件可以从接口数据文件中获取增量数据,同时ETL也可以从镜像库中获取所有需要的其他数据(例如首次数据抽取,或者全量数据抽取) 上图为DSG ETLPlus的工作原理图,从中我们可以看出ETLPlus不是去替代现有的ETL工具,而是对现有的ETL工具进行增强,增强之处在于: (1)将ETL和生产系统分开,形成中间数据库。 (2)ETLPlus的增量通知功能,使得ETL简单容易识别增量数据; (3)ETLPlus根据接口要求自动生成和ETL的接口数据,而且接口数据可以根据参数配置设定生产间隔,可以实现到每几秒钟生成一个接口文件。 (3)可为ETL提供一些有价值的附加功能,例如提供全量数据抽取时的静态数据支持等。 2.1 技术要点分析 为了提供增量数据实时抽取功能,ETLPlus软件提供了如下关键技术: (1)oracle数据库的增量跟踪技术 增量跟踪技术是该组件的最重要环节,因为该环节的目的是解决传统ETL厂商无法解决的实时抽取和增量抽取问题。 DSG ETLPlus产品采取的增量识别技术如下: 在源端数据库上安装ETLPlus agent代理程序。源系统端的Agent进程对Oracle Log日志进行实时分析,从而获取源系统端的交易指令;然后,将这些交易指令和交易数据经过格式转化生成数据格式,并根据不同业务需求进行过滤和转化成与生产应用相吻合的指令;再次,实时传输到目标端系统。 (2)数据存储和增量变化通知功能 有了数据的实时捕获,那么捕获到的数据如何通知给ETL工具,如何将数据保存起来供ETL使用,这就是本产品的第二个关键点。 本产品采用的技术路线如下: 首先创建一个中间数据库,该数据库用作ETL直接数据抽取的数据库,避免ETL直接从生产数据库中抽取; ETLPlus软件将识别到的技术发送到中间数据库的代理程序上; 代理程序将变化数据作两类处理:一是在中间数据库上维护一张和生产系统对应的数据表;二是根据变化记录经过整理形成完整的记录形成接口文件。 这样ETL工具就能够根据变化跟踪记录中记录所有发生过变化的记录,并且生成ETL工具所需要的增量数据。从而实现增量数据的实时抽取。 2.2 解决方案优势 本方案是在现有的数据仓库基础上进行改造和增强来完成,对现有的数据仓库中已经购买的ETL软件和数据仓库软件完全兼容。 经过此改造,我们认为对于数据库的数据抽取将带来本质上的变化: (1) 缩短抽取时间:可达到准实时的数据抽取效果,间隔可达到几秒、几分钟; (2) 降低对CRM数据库的影响:采用ETLPlus对CRM的redo log分析的CPU资源占用<5%,这远远小于ETL直接采用select方式所需要的资源; (3) 降低数据仓库压力:采用该方式后,不用每天都对全量数据进行处理,只需需要多增量数据部分进行处理。 3 DSG ETLPlus部署方案 3.1 部署结构 为了部署ETLPlus,以采用如下方式来部署: 在数据源的oracle数据库上安装ETLPlus Agent,用来跟踪数据源上的数据变化,通过对redo log进行分析,将跟踪到的变化记录从日志中整合出来(不需要从生产数据库中select)。 在数据仓库服务器上或者在ODS服务器上也安装ETLPlus agent,同时在目标端机器上安装一个oracle数据库,ETLPlus Agent一方面将需要抽取的那些表在目标端服务器上维护一个实时更新的与生产系统保持同步的相同的表;同时在目标端上为每个表每隔一定时间生成一个接口文件。 ETL工具通过ETLPlus生成的接口文件来获取变化的数据内容,实现数据仓库或者ODS系统的数据更新; 如果ETL工具需要进行全量数据抽取,那么就可以直接在ETLPlus维护的目标端表中直接抽取,而不需要从生产数据库中再去抽取。 在ETLPlus部署中,需要一个中间数据库系统,该系统需要服务器、磁盘阵列和ORACLE数据库,ETLPlus将生成的ETL接口文件保存到该服务器的文件系统上供ETL工具读取。 3.2 软硬件环境要求 以上方案中提到了需要一个ETLPlus的中间数据库(这里我们叫做接口数据库),该接口数据库有两个目的: (1) 保存了ETL所需要的表的完全数据,这些表和生产系统保持实时同步 (2) 这些表可用作全量抽取时使用,让全量抽取的时候也不需要到生产数据库上获取 (3) 帮助生成增量接口数据文件,因为对于INSERT ,DELETE操作来说,完全可以依赖于从源表读取来的redo log生成完整的接口数据;但是对于UPDATE操作来说,无法根据redo log的数据来生成完成一条记录,而必须借助于接口数据库中的完整数据。 该中间数据库可在ODS系统或者数据仓库系统中预留部分空间即可。 3.3 ETL接口文件说明 一、 接口文件格式要求 根据和ETL开发商的沟通讨论结果,DSG ETLPlus将根据规则生成接口数据文件,接口数据文件以不同的table作为一个定义,这里以一个table的定义为例说明: 1.接口数据项
a_200902221815_11023.dat I|-1|-1|-1|缺省组织|-1|外键关联用,无意义|-1|00A|2009-2-22 18:01:00|1| I|1|-1|1|中国电信集团|1|中国电信集团|-1|00A|2009-2-22 18:01:00|1| I|10|1|10|甘肃电信|2|甘肃电信|-1|00A|2009-2-22 18:01:00|2| D|10|1|10|甘肃电信|2|甘肃电信|-1|00A|2009-2-22 18:05:00|2| I|931|10|931|兰州电信|3|兰州电信|-1|00A|2009-2-22 18:01:00|2| U|931|10|931|兰州电信公司|3|兰州电信公司|-1|00A|2009-2-22 18:08:00|2| 3.接口数据校验文件 a_200902221815_11023.verf a_200902221815_11023.dat 386 6 20090222181520090222182615 4.日接口校验汇总文件 d_a_20090225.verf a_200902211230_10001.dat 0 a_200902211230_10002.dat 14 a_200902211230_10003.dat 200 a_200902211230_10004.dat 12 a_200902211230_10005.dat 50 a_200902211230_20001.dat 18 a_200902211230_20002.dat 62 a_200902211300_10001.dat 44 二、配置参数说明 为了提供上述信息的配置项,DSG ETLPlus将提供如下的配置信息来配置需要输出的接口定义: ETL_INTF.CONF [COMMON] OUT_DIR=$DBPS_HOME/intdata /*指明输出数据所存放的路径*/ ITVL= 3600 /*指明数据输出的间隔,单位为秒*/ TMPFILE_suffix=.TMP /*指明临时文件的后缀名*/ Separator =‘|’ /*指明数据项之间的分隔符*/ [TABLE1] TABLE_NAME=OWNER.TABLE_NAME /*表名*/ data_FILE_name=$tablename_YYYYMMDDHHMISS_????.dat /*该表所对应的输出接口datafile文件的命名格式*/ verify_FILE_name=$tablename_YYYYMMDDHHMISS_????.verf /*该表所对应的输出接口verify file文件的命名格式*/ date_verify_FILE_name=d_$tablename_YYYYMMDD.verf /*该表所对应的输出接口date verify file文件的命名格式*/ field_list=PARTY_ID,PARENT_PARTY_ID,ORG_CODE,ORG_NAME /*定义该表所需要输出的字段及其输出顺序*/ [TABLE2] TABLE_NAME=OWNER.TABLE_NAME /*表名*/ data_FILE_name=$tablename_YYYYMMDDHHMISS_????.dat /*该表所对应的输出接口datafile文件的命名格式*/ verify_FILE_name=$tablename_YYYYMMDDHHMISS_????.verf /*该表所对应的输出接口verify file文件的命名格式*/ date_verify_FILE_name=d_$tablename_YYYYMMDD.verf /*该表所对应的输出接口date verify file文件的命名格式*/ field_list=PARTY_ID,PARENT_PARTY_ID,ORG_CODE,ORG_NAME /*定义该表所需要输出的字段及其输出顺序*/ |
相关阅读 更多 +