数据仓库的一个重要功能就是对不同来源的数据进行归集和处理。不同类型的数据对象可以用来存储这些数据或者实现数据的联合视图。这些对象相对而言是静态的。但是,对数据的转换和处理就需要在数据的流转过程中进行定义。数据从来源系统或者一个数据对象中被读取出来,经过一定的转换和处理,再存储到另一个数据对象中。这一过程实现了对数据的加工,真正体现了数据仓库的价值,是数据仓库模型中动态的部分。
企业如何通过各种技术手段,把数据转换为信息、知识已经成了提高其核心竞争力的主要瓶颈。数据抽取、转换、加载(Extract ,Transform, Load, ETL) 技术正是解决这一问题的一把利刃。
数据仓库的架构大体可以分为三部分:后台是数据存储和计算引擎:前端是数据展现分析的用户界面:还有一个重要的部分就是ETL 。
ETL 所完成的工作主要包括3 方面:
1) 在数据仓库和业务系统之间搭建起一座桥梁,确保新的业务数据源源不断地进入数据仓库:
2) 用户的分析和应用也能反映出最新的业务动态,虽然ETL 在数据仓库架构的三部分中技术含量并不算高,但其涉及到大量的业务逻辑和异构环境,因此在一般的数据仓库项目
中ETL 部分往往也是牵扯精力最多的:
3) 如果从整体角度来看, ETL 主要作用在于屏蔽了复杂的业务逻辑,从而为各种基于数据仓库的分析和应用提供了统一的数据接口,这也是构建数据仓库最重要的意义所在。
作为BI/DW 的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。数据转化为信息绝不是没有价值的任务。由于不能很好地提供数据,让用户可以容易地使用数据进行分析,数据仓库经常被放弃。实际上,如果不对数据进行转换,这些提供的数据是无用的。因为它既不能被管理,也不能被利用。这样项目是个极大的风险,因此,明确数据仓库项目的实际目的特别重要:提供决策支持或支持管理的决策。数据仓库必须以可用信息的形式向目标群提供存储的数据。
如果说数据仓库的模型设计是一座大厦的设计蓝图,数据是砖瓦的话,那么ETL 就是
建设大厦的过程。在整个项目中最难部分是用户需求分析和模型设计,而ETL 规则设计和
实施则是工作量最大的,约占整个项目的60% -80% ,这是从国内外众多实践中得到的普遍共识。
一个成熟的ETL 体系结构,一般包含以下组件,它也体现了主流ETL 产品框架的主要组成部分。
1) ETL 设计:提供一个图形化的映射环境,让开发者定义从源到目标的映射关系、转换、处理流程。设计过程的各对象的逻辑定义存储在一个元数据资源库中。
2) 元数据管理:提供一个关于ETL 设计和运行处理等相关定义、管理信息的元数据资料库。ETL 引擎在运行时和其他应用都可参考此资料库中的元数据。
3) 数据抽取:通过接口提取源数据,例如ODBC、专用数据库接口和平面文件提取器,并参照元数据来决定数据的提取及其提取方式。
4) 数据转换:允许用户将提取的数据,按照业务需要转换为目标数据结构,并实现汇总。
5) 数据加载:加载经转换和汇总的数据到目标数据仓库中,可实现批量加载。
6) 数据传输进程:利用网络协议或文件协议,在源和目标系统之间移动数据,利用内存在ETL 处理的各组件中移动数据。
7) 管理和操作平台:可让管理员基于事件和时间进行调度、运行、监测ETL 作业、管理错误信息、从失败中恢复和调节从源系统的输出。
ETL 过程在很大程度上受企业对源数据的理解���度的影响,也就是说从业务的角度看数据集成非常重要。基于这样的体系结构, ETL 工具的不同组件各自实现着不同的作用,实现
不同的功能。当系统功能改变时,应用程序只需要进行很少修改就可适应变化,可扩展性强。
一个好的ETL 工具,应该能够从技术方面保证对数据质量的自动检验,屏蔽掉烦琐的技术细节,使用户可以把更多的精力花在业务逻辑的设计上面。在ETL 转换过程中,对数据质量的控制可以从以下6 个方面着手。
1) 空值处理:系统可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
2) 规范化数据格式:可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
3) 拆分数据:可以依据业务需求对字段可进行分解。例如,对电话号码可进行区域码和市话号码的分解。
4) 验证数据正确性:系统在数据加载时可以自动利用查询相关的主数据表或字典表,对新数据进行数据验证口
5) 数据替换:对于因业务因素,可实现无效数据、缺失数据的替换。能缺失数据通过子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
6) 建立ETL 过程的主外键约束:对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键惟一记录的加载。
为了能更好地实现ETL ,建议用户在实施ETL 过程中应注意以下几点:如果项目时间
允许,可建立专门的数据中转层对运营数据进行转换处理,保证集成与加载的高效性:要保证按统一的数据标准对不同的源系统的数据做转换。ETL 面临的最大挑战是当接收数据时,
其各源数据的异构性和低质量。而ETL 在处理过程中会定义一个关键数据标准,并在此基
础上,制定相应的数据接口标准。
SAP BI 集成了对各种源系统进行数据抽取、数据转换及加载到数据仓库中的各种功能。SAP 提供简单的图形化界面操作,可以通过简单的拖动实现数据源的建立、数据的抽取,可以定义数据转换规则的规则,可以定义数据加载的方式、时间等。系统在后台自动生成基于ABAP 语言的程序。同时, SAP BI 在转换规则定义时也提供了面向专家应用的功能,用户可以直接使用编程来定义数据处理的规则。
在企业数据仓库的建模流程中"数据获取"流程正是数据仓库建设中的数据抽取部分,也就是E 的部分"数据转换"流程是数据仓库建设中的数据转换部分,也就是T 的部分,这两个部分都属于数据仓库建模的工作,一般都是只需要一次性完成的工作。在企业数据仓库的运行流程中"数据流控制"流程正是数据仓库的数据加载流程,也就是L 的部分。
下面我们来根据上面这张图详细分析一下SAP中的ETL过程。
1. 源系统
图形的最底部是SAP BI 之外的系统, SAP BI 会从这些系统中抽取数据,并对不同来源的数据进行整合。这些为SAPBI 提供数据的系统,称为源系统。它们是SAPBI 数据的来源。在SAPBI 系统中,我们会建立与这些源系统的连接,并通过信息包将数据传送到BI 系统中。
如果源系统是SAP 系统, SAP 提供了SAP NetWeaver 插件。SAP NetWeaver 插件是一个基于ABAP 编程语言的应用组件,它提供了不同SAP 系统的集成功能,使在不同的SAP 系统之间进行主数据和交易数据的交换成为可能。要将这一插件安装到SAP 源系统中,它封装了众多针对于SAP 系统的数据源、数据抽取器及其他与SAP BI 相关的一系列功能。由于SAP插件提供的数据源及数据抽取器包含了相应的取数逻辑。因此,用户不必关心SAP 源系统的数据结构,只要在应用层面选择相应的数据源即可完整地获取SAP 源系统的数据。
2. 数据源与PSA
图形的中上部分是SAP BI。数据源、转换、信息提供者和开放集成器都是SAP BI 内部的对象。来自源系统的数据在进行SAP BI 时,是存储在数据源中的,更准确地说,是存储在数据源对应的PSA 表中。数据源定义了从源系统上传上来的数据的结构。同时,系统为每一个数据源自动生成结构相同的PSA 表。PSA 是持续数据加载区(Persistent Staging Area)的缩写。PSA 表是二维表,由系统自动生成与管理,用于临时存储从源系统传过来的数据,用户可以查看和编辑这些数据。
数据源只是定义了数据的结构,一般而言,数据源的结构大多与源系统的数据结构有简单的一一对应关系。数据抽取的动作则是由信息包(Info Package) 定义和触发的。
3. 转换与数据传输进程
数据源IPSA 表中的数据经过转换到达信息提供者。转换定义了数据源字段与信息提供者字段之间的对应关系及转换规则,本身并不存储数据。数据经过转换后存入信息提供者。同样的,转换本身只是对数据转化规则的定义,数据的批量转换的动作是由数据传输进程(DTP) 定义的,数据传输进程与信息包类似,定义和触发数据传输。所不同的是,信息包触发的是从源系统到数据源的数据传输,数据传输进程触发的是从数据源到信息提供者的数据传输。转换和数据传输进程不仅可以实现数据源到提供者的数据传输与转换,还可以实现不同信息提供者之间的数据传输,以及信息提供者到开放集成器的数据传输。SAP BI 系统中的数据通过开放集成器转换成指定的文件或数据库表,为其他任何类型的系统提供数据。
4. 信息源
数据转换是ETL 的核心。SAP 还提供为复杂的数据转换提供另一个选项一一信息源,一般情况下,转换直接连接数据源(或作为源的信息提供者〉和目标信息提供者,没有必要使用信息源。如果存在多个不同的数据源,首先要对不同的数据源进行数据转化,然后以统一的数据格式去更新多种信息提供者。比如,要对不同的数据源进行货币或单位的换算。此时,可以定义一个信息源作为中间结构,针对不同数据源的数据处理与转化在从数据源到信息源的转换中定义;针对不同的信息提供者的数据转化在从信息源到信息提供者的转换中进行维护,可以减少分别维护转换的工作量,同时使单个转换变得简单,易于维护。当然,这种情况下也可以定义一个信息提供者作为中间层。不同的是,信息提供者本身存储数据,占用空间,而且需要两次数据传输;而信息源不存储数据,数据只经过一次数据传输进程就实现从数据源到信息提供者的传输。
SAP BI 的数据抽取完成的是将数据从各种源系统中传送到SAPBI 系统中的过程。SAP BI提供了全面的解决方案,包括了与各种源系统的连接技术、数据接口的定义和管理,还包括对数据传送过程的规划和监控等。