项目引言
从数仓
ETL (数据仓库技术)
ETL,是英文Extract-Transform-Load
的缩写,用来描述将数据从来源端经过抽取(extract
)、转换(transform
)、加载(load
)至目的端的过程。ETL一词常用在数据仓库,但其对象并不限于数据仓库。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据, ETL是BI(商业智能)项目重要的一个环节。
ETL所描述的过程,一般常见的作法包含ETL或是ELT(Extract-Load-Transform
),并且混合使用。通常愈大量的数据、复杂的转换逻辑、目的端为较强运算能力的数据库,愈偏向使用ELT,以便运用目的端数据库的平行处理能力。
ETL(or ELT)的流程可以用任何的编程语言去开发完成,由于ETL是极为复杂的过程,而手写程序不易管理,有愈来愈多的企业采用工具协助ETL的开发,并运用其内置的metadata功能来存储来源与目的的对应(mapping
)以及转换规则。
工具可以提供较强大的连接功能(connectivity
)来连接来源端及目的端,开发人员不用去熟悉各种相异的平台及数据的结构,亦能进行开发。
当然,为了这些好处,付出的代价便是金钱。
CDC
Change Data Capture(改变数据捕获)是Oracle
在数据库级别的实现
CDC能够帮助你识别从上次提取之后发生变化的数据。
利用CDC,在对源表进行INSERT
、UPDATE
或 DELETE
等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发生变化的数据,然后利用数据库视图以一种可控的方式提供给目标系统。
目前,最为常用的ETL增量数据处理方式有几种:
-
时间戳(弱点:要求业务系统的表必须有一个可以标识新旧数据的字段)
-
日志对比
-
全面数据对比(弱点:高网络负载、性能代价高、无法反映数据的历史状态)
-
触发器(优点:抽取性能高。缺点:需要业务表建立触发器,对业务系统有一定的影响。)
CDC几个概念:
-
源表(Source Table),业务数据库的需要捕获数据的源表
-
变化表(Change Table),保存从源表捕获的变化数据(包括各种DML产生的数据)
-
变化集(Change Set),是保证事务一致性的数据集合。一个变化集对应多个变化表
-
订阅视图(Subscription View),提供给读取变化表数据的视图
-
订阅窗口(Subscription Window) ,定义了查看变化数据的时间范围,就像一个观察变化数据的滑动窗口。变化数据处理完成后,可以清除订阅窗口。
CDC的发布订阅模型:
- CDC体系结构基于发布者/订阅者模型。发布者捕捉变化数据并提供给订阅者。订阅者使用从发布者那里获得的变化数据。
CDC的两个模式:
-
同步:同步CDC主要是采用触发器记录新增数据,基本能够做到实时增量抽取。
-
异步:异步CDC通过分析已经commit的日志记录来得到增量数据信息,有一定的时间延迟,并且提供了到
oracle Streams
的接口。 -
同步CDC在企业版或者标准版中都可以使用,异步CDC则只包含在企业版中。
PowerExchange实时抽取架构介绍
工作原理

以上共有核心业务系统数据库服务器、ETL服务器、BI数据库服务器〔目标数据库服务器〕三台服务器和ETL客户端(PowerCenter客户端)。其中核心业务系统上有核心系统产生的Redo Log
(即为归档日志)、安装Oracle Logminer、安装PowerExchange,ETL服务器上安装PowerCenter及PowerExhchange的客户端、BI数据库服务器为目标数据库、ETL客户端安装(PowerCenter客户端)。
核心业务系统数据库服务器在进行业务过程中,会一直写Redo Log
,Logminer
为Oracle
日志分析工具,能够对Redo Log
及Achive Log
进行解析;PowerExhchange
为Oracle Logminer
和ETL
工具PowerCenter
的接口,实现对Logminer
的封装,通过它来定义要获取哪些表的增量及增量数据放到哪张对应的增量表中〔增量表结构是自己定义〕。
ETL客户端主要用来定义数据的抽取、转换、加载规则,比如:定义要抽取哪些表的增量、抽取的频率、要将增量数据插入到哪个数据库〔可以是任何数据库服务器上的表〕。在获取增量后如何处理这些增量(转换)等。
ETL服务器执行客户端定义好的ETL规则。在执行过程中,通过PowerExchange接口实时抽取核心业务系统产生的增量,并根据规则转换处理或不进行转换插入到BI数据库服务器上相应的目标表中。
具体执行流程是,PowerExchange和Logminer以类似服务的形式,在核心业务系统上执行,当ETL服务器启动抽取时,通过PowerExhchange接口调用在核心业务系统上的PowerExchange,PowerExhchange再调用Logminer,Logminer对核心业务系统产生的Redo Log进行解析。解析完成后将数据返回给PowerExhchange,PowerExhchange将数据返回给ETL服务器,ETL服务器根据ETL客户端指定的规则(经过加工处理或不经过加工处理)处理后将增量数据加工到BI数据库服务器相关的表中。
详细介绍




在Oracle
服务器端的详细操作如下:
1、 执行以下脚本
说明:如果数据库已经是归档模式则不需要创建和指定归档日志存放路径。
必须创建针对PowerExchange
使用的Oracle
用户赋予指定权限,主要是为了对Logminer
解析出数据后,存放数据的视图进行操作。
设置Oracle Supplemental Logging
。默认情况下,Oracle
记录日志是没有数据表中的字段数据内容,设置Supplemental Logging
完成后,Redo log
会记录发生变化的每条记录的前像内容和后像内容。只有这样,才能获取到变化记录内容。
创建Logminer
表空间。Logminer
在进行数据解析后,会将解析的结果数据保存到几个视图中。也就是说需要将数据暂存到数据表空间中。
编译Logminer
系统包。
将Oracle Catalog
复制到redo logs
Logminer
根据对数据字典的使用分为三种模式〔数据字典是将redo log
中的对象代码转换成具体表名等对象名的映射文件〕,user online Catalog
、Extracting a LogMiner Dictionary to the Redo Log Files
、Extracting the LogMiner Dictionary to a Flat File
。
PowerExchange
在调用Logminer
时,使用Extracting the LogMiner Dictionary to a Flat File
这种模式。这种模式不需生成数据字典文件,即将数据字典内容写入到redo log
中,因此没有额外的对数据库的操作。
2、 在Oracle
服务器端安装PowerExchange
PowerExchange
主要是实现对Oracle Logminer
进行封装的工具,Logminer
实现了对数据库日志的解析,但是要达到实时获取增量数据的目的需要涉及以下方面的问题:
(1) 如何实时进行解析
Oracle Logminer
进行日志解析,需要调用Logminer
的命令。每次命令可以解析整个redo log
内容,也可以按照时间进行解析。但是,需要手工执行命令。PowerExchange
利用自身的触发机制,对logminer
进行自动的调用,实现准实时增量数据的获取。
(2) 解析出的内容的处理
Logminer
在解析出变化数据后,会存放到相关视图中。视图存放所有变化数据表的数据,在应用时,必须对视图进行查询,然后将数据转移到相关的数据表中。Logminer
提供图形化操作页面,通过Navigator
进行对解析数据的定义及处理。
(3) 稳定性及效率问题及和ETL
工具的结合
直接调用Logminer
会涉及到频率、稳定、效率等诸多考虑因素,PowerExchange
作为产品这些问题都有具体的处理。同时PowerExchange
作为Informatica
的一个组件,非常方便的整合到ETL
调度体系中。
PowerExchange
在oracle
服务器端,做为一个服务贮存,监控数据的产生。通过ETL
工具将实时抽取配置成一个Informatica Powercenter
的WorkFlow
。PowerExchange
获取到数据后,自动运行此WorkFlow
将获取到的数据抽取到定义好的目标表中。
网友评论