###	Index:1093	《科技创新与应用》	充分运用ETL工具,构建完整的数据仓库体系结构
充分运用ETL工具，构建完整的数据仓库体系结构

作者：潘敏来源：《科技创新与应用》2015年第17期

摘要：随着信息技术的发展和大量业务数据的积累，数据仓库的开发建设受到越来越多的关注和重视。但是，数据仓库涉及到很多计算机理论和技术，而且在设计、规划和实施等阶段中，也会遇到各种困难和风险。文章针对数据存储和处理这个关键环节，来介绍构建完整的企业级数据仓库将面临的技术难点，并根据实际项目经验，给出如何利用ETL工具解决问题的实践思路和方法。关键词：数据仓库；数据处理；ETL；ODI；接口1数据仓库的体系结构数据仓库是面向主题的、集成的、相对稳定的、反映历史变化的数据集合。它通常是指一个数据环境，通过提供当前和历史数据来辅助决策支持。数据仓库的组成部分有：数据仓库数据库、ETL工具、元数据、访问工具、数据集市、数据仓库管理等。通过对多个异构数据源进行有效的集成，并按照应用主题进行数据重组和展示，就形成了数据仓库系统。由此，根据应用需求的不同，数据仓库的体系结构可以分为以下四种：（1）两层结构：源数据系统经过处理直接加载到数据仓库；（2）独立型数据集市：加工成多个独立的数据集市来满足多种应用需求；（3）依赖型数据集市和操作型数据存储：完整的数据仓库，多个源数据系统先集成到操作型数据存储（ODS），再转换、加载到数据仓库，最后形成部门级数据集市。文章描述的就是此体系结构的构建过程。它的特点是：整合多个复杂的源数据系统；实现各种复杂的数据转换处理；提供多层次的数据访问；满足多部门的即独立又交叉的应用需求；（4）逻辑型数据集市和实时数据仓库：没有独立的数据集市，体现数据加工的实时性。2数据仓库的ETL过程ETL过程是数据加工处理过程的统称，包括三个部分：抽取、转换和加载。它的目的是为决策支持应用提供一个单一的、权威的数据源。数据仓库的ETL过程是整个系统实施的关键环节，关系到数据仓库的建设成效。无论从理论上还是从实践上来说，运用ETL工具是一个必需的、明智的选择。文章以Oracle公司的软件产品ODI11g来讲解。3ETL的技术难点

数据仓库的数据存储有四个层次，即源数据系统、ODS、企业级数据仓库和数据集市。运用ETL工具就是实现数据在这四个层次中逐层递进的三级加工处理过程。虽然每一级处理都具有抽取、转换、加载的处理，但是它们的侧重点还是有区别的。（1）源数据系统到ODS过程：将多个异构数据源集成到统一的数据集结区ODS，重点是抽取处理，兼有字符集转换、数据类型转换等处理。（2）ODS到企业级数据仓库过程：将操作型数据转换成事件型数据，重点是转换处理，包含清洗、调和、导出、匹配、合并等多种复杂处理。（3）企业级数据仓库到数据集市过程：将数据按照应用需求进行组合，重点是加载处理，还涉及到索引、更新等处理。下面，结合三级处理，从四个方面描述常见的技术难点及应对。3.1数据抽取（1）静态抽取：为了保证源数据的一致性和完整性，应该抽取操作型数据相关的代码数据和编码数据。这些数据特点是量小，变化小，可以采用全量刷新方法。ODI工具中，编制一个接口，指定源表和目标表，确定LKM和IKM，即可实现。此方法也适用于初次抽取操作型数据。（2）增量抽取：源数据系统包含大量的业务数据，必须通过增量更新的方法才能做到有效的抽取。因此，增量更新问题是一个最重要、最根本的技术问题。ODI工具内置的变化数据捕获机制（CDC）能有效地解决这个问题。实现思路如下：为源表指定日记知识模块JKM；将源表添加到CDC列表，并启动日记；编制接口时，勾选日记记录的数据，并指定增量模式的IKM。此外，还可以通过编制ODI过程代码来利用现有的物化视图实现增量更新。3.2数据转换（1）关键维度的统一：多个源数据系统集成后，首先面临的问题就是关键维度的统一。不同的业务系统有各自不同的关键维度（如纳税人识别号，纳税人电子档案号），这就必须统一到唯一的维度。解决这个问题，可以采用对照表的方法。实现思路如下：选定主要的、核心的业务系统的关键维度；以此维度为主，建立其他业务系统的维度对照表；ODI工具中，编写接口时，增加连接维度对照表，增加字段映射。（2）数据表的合并：业务系统中可能存在同一事件信息存储于不同的数据表中的情况。ETL过程需要将分散的数据转换到一个数据表。虽然可以编写多个ODI接口实现，但是不可避免地存在数据完整性风险，且编制繁琐、执行效率低下。建议采用多个源数据集来实现，思路如下：在ODI接口中，配置多个源数据集，并设置数据集的顺序和关系；以第一顺序数据集为主，分别设置目标数据项映射关系；指定带有多数据集功能的标准LKM和IKM。（3）数据表的拆分：业务系统的单一数据表中可能包含同一维度下的不同粒度的数据，这时就需要将源表数据拆分成多个目标表。常见的情况是，纳税人财务报表数据表中同时包含月报、季报和年报。由于ODI11G版本中限定每一个接口只能有一个目标数据存储，所以必

须采用新的方法来处理。这里，介绍两种方法来实现。a.编制多个接口，封装在一个程序包中。步骤如下：分别编制多个接口对应多个目标表，将最后一个接口的“清除日记表”选项设置为真，其余接口该项为假；建立程序包，按顺序导入这批接口。b.改造标准IKM，添加插入数据步骤。步骤如下：编制普通的ODI接口，实现一个目标表的加工；模拟执行接口，并分析执行语句和顺序；获取与目标表相关的语句；复制IKM，并编辑，按照原目标表语句增加其余目标表的执行步骤；指定新的IKM。此方法优点是执行效率高，缺点是改造IKM需要一定的技术储备，且增加了项目的整体复杂度。（4）最新有效数据的问题：分析源数据系统的业务规则时，会发现有多次记录业务操作数据的情况，例如更正申报。这就要求在数据转换时，应以操作时间最新或者操作序号最大的记录作为有效数据。解决的方法有两种：a.编写2个接口，利用临时表存储最新操作时间或最大操作序号，然后再关联源表数据，最后将2个接口依次导入程序包。b.改造IKM接口，增加2个新步骤，修改1个原步骤，具体如下：新增步骤-创建临时表；新增步骤-在临时表中插入满足业务逻辑的最新有效凭据（时间或序号）；修改步骤-在目标表中插入关联到临时表的源表数据。3.3数据加载（1）创建目标表主键：虽然在接口中可以指定目标表的主键，但是标准的ODI处理并不能自动生成该主键。为此，改造IKM来实现这个重要功能：选择适当的IKM，为其增加一个选项，并指定类型和默认值；在原IKM步骤中，增加一个创建主键的新步骤，并在此步骤的选项栏次中勾选新增选项。此方法的原理是通过一个自定义选项来控制IKM的逻辑判断，由用户通过配置来决定是否执行此步骤。（2）实现增量的全量加载在企业级数据仓库和数据集市中，常常需要对不同粒度的数据进行加载，例如将月度数据加载到年度分析中。为此，文章提出以增量的全量方式加载数据，提高效率。具体思路如下：获取增量中所有的月度；删除目标表中包含这些月度的年度数据；重新获取源表中包含这些月度的数据，并加工成年度数据；加载年度数据到目标表。数据仓库是包含一系列理论和技术的综合环境，它的目的是为数据分析和决策支持提供历史的、丰富的、可用的数据。由此，数据的存储和处理也紧紧围绕这一目的而展开。在这个过程中，工具软件有着不可替代的重要作用。很多开发建设理念就集成在工具软件的应用中。只有充分理解其基础功能，将其不断改造完善，才能使这些理念和规则落地，支撑起整个数据仓库。

