HUNAN UNIVERSITY
毕业设计(论文)
设计论文题目: 提高数据仓库中数据质量的研究
学生姓名: 学生学号: 专业班级: 学院名称: 指导老师: 学院院长:
2008年5月20日
高忠山 20041610505 软件开发班 软件学院 申煜湘 林亚平
湖南大学毕业设计(论文) 提高数据仓库中数据质量的研究
第 I 页
摘 要
数据仓库是一个面向主题的、集成的、相对稳定的、能够反映历史变化并且能够支持管理决策的数据的集合。维护数据仓库中数据的正确性是非常重要的环节,而ETL是构建数据仓库的重要组成部分,要占据60%左右的工作量。提高数据仓库中的数据质量有利于保障数据仓库的可靠性,也有利于企业长期的总结和应用数据。提高数据质量的方法很多,鉴于本项目在实际工程应用中的经验总结和实践积累,本文主要侧重于利用ETL调度以及校验的方式来提高数据仓库中的数据质量。
首先,利用ETL调度原理实现数据的自动化调度,使数据成为一个流动的数据流,数据所在的数据库作为ETL流的起点,保存最终高质量数据的数据仓库作为ETL数据流的终点。
其次,对于已经形成ETL数据流的数据生成流实例信息,对完成ETL流程处理的数据构造历史信息,从而保证能够对ETL流进行监控。
再次,构造ETL流程的处理逻辑,这是构造高质量数据的核心部分,根据实际的经验构造自动化的校验程序,使数据流流过时校验程序能够纠正错误数据,最终达到获得高质量数据的目的。
最后,经过EMC项目的实施情况证明,非法数据在以ETL流的形式流经校验程序时都能够按照提前设定得到处理,保证了数据仓库中数据的稳定性。
关键词:ETL,EMC(ETL管理中心),数据仓库
湖南大学毕业设计(论文)
第 II 页
The Research in Improving the Quality of Data in the Data Warehouse
Abstract
Author: Gao Zhongshan Tutor: Shen Yuxiang
Data Warehouse is a data collection which is subject-oriented, integrated, and relatively stable. It can reflect the changes of history and support the management decision. It is an important segment to maintain the accuracy of the data warehouse. However, ETL is an important part to build data warehouse and occupy about 60 percent of the load. The improvement of the quality in the data warehouse helps to guarantee the reliability and also help the enterprise to summarize and use the data for a long period of time. There are many methods to improve the quality of data. However, in the view of the experience summary and practice accumulation in the practical application, the paper mainly focuses on the ETL dispatcher and way of check to improve data quality of data warehouse.
First of all, the automation of data management which is realized by ETL principle make the data into a data stream., the database where the data exists become as starting point of ETL, saving the data warehouse with ultimate high-quality data as the end of ETL.
Second, for the data which the ETL data flow has been formed to generate example, for the data which complete ETL processes structure to handling historical information, thus ensuring that the ETL flow can monitoring.
Third, building the processing logic of ETL tectonic processes is the core of constructing high-quality data, constructing the automated calibration procedures based on the actual experience, so that the calibration procedures can correct erroneous data when passing by, and finally achieving the goal of access the high-quality data.
Finally, the implementation of the EMC project has proved that the illegal data in the form of ETL run through calibration procedures can be handled in accordance with the set in advance, ensuring the stability of data in warehouse data.
Key words: ETL, EMC (ETL Manage Center), Data WareHouse
湖南大学毕业设计(论文)
第 III 页
目 录
1. 绪论 ....................................................................................................................................... 1
1.1 研究背景 ...................................................................................................................... 1 1.2 国内外研究现状 .......................................................................................................... 2 1.3 本文的主要研究内容和内容组织 .............................................................................. 3 2. 数据仓库以及ETL ............................................................................................................... 4
2.1 数据仓库(Data WareHouse, DW) .......................................................................... 4 2.2 ETL(Extract, Transform, loading) ........................................................................... 6
2.2.1 ETL简介 ............................................................................................................. 6 2.2.2 ETL过程特点 ..................................................................................................... 6 2.2.3 数据质量保证 .................................................................................................... 7 2.2.4 元数据:拓展新星应用 .................................................................................... 8
3. EMC项目中的ETL应用 ................................................................................................... 10
3.1 业务背景 .................................................................................................................... 10 3.2 实例概述 .................................................................................................................... 12 3.3 总体流程 .................................................................................................................... 13 3.4 接口表 ........................................................................................................................ 13 3.4 企业数据迁移(EDM)模型层 ............................................................................... 14 3.5 事实表层 .................................................................................................................... 15 3.6 数据集市(DM)层 .................................................................................................. 15 3.7 多维分析(OLAP)层 .............................................................................................. 16 3.8 总体处理流程、反馈过程 ........................................................................................ 16 4. EMC中数据调度校验的应用 ............................................................................................ 17
4.1 需求分析 .................................................................................................................... 18
4.1.1 需求设计描述 .................................................................................................. 18 4.1.2 功能性需求描述(按功能模块进行说明) .................................................. 18
湖南大学毕业设计(论文)
第 IV 页
4.1.3 非功能性需求描述 .......................................................................................... 19 4.2 系统总体设计 ............................................................................................................ 19
4.2.1 系统总体功能设计图 ...................................................................................... 19 4.2.2 系统总体功能设计图说明 .............................................................................. 20 4.2.3 系统功能设计描述 .......................................................................................... 21 4.3 概要设计 .................................................................................................................... 21
4.3.1 概要功能设计图 .............................................................................................. 21 4.3.2 功能性描述(按功能模块) .......................................................................... 22 4.4 后台调度流程 ............................................................................................................ 24
4.4.1 ETL任务调度概述 ........................................................................................... 24 4.4.2 任务/任务组实例化 ......................................................................................... 25 4.4.3 任务实例调度 .................................................................................................. 26 4.5 后台校验流程 ............................................................................................................ 27
4.5.1 功能 .................................................................................................................. 28 4.5.2 数据结构 .......................................................................................................... 28 4.5.3 流程 .................................................................................................................. 28 4.5.4 重要函数 .......................................................................................................... 30
5. 效果说明和总结 ................................................................................................................. 38 致谢 .......................................................................................................................................... 39 参考文献 .................................................................................................................................. 40
湖南大学毕业设计(论文)
第 1 页
1. 绪论
1.1 研究背景
随着全球经济一体化进程的推进以及我国的经济快速增长,大多数行业的市场竞争激烈加剧。这对企业管理和经营决策的制定的时效性、科学性、准确性提出了很高的要求。只有以数据为基础,从基于经验的分析到基于准确事实的洞察,才能有效保证企业服务质量、营销成功率和管理水平,节约企业营销成本,最终使企业利润和客户满意度的最大化。数据仓库正是在这种大环境下应运而生了。
随着我国电信体制改革的深化,行业垄断格局已被打破,国内通信市场形成了电信、移动、联通、网通、铁通等多元化竞争局面,竞争日趋激烈。电信运营商的经营理念也逐渐从“以产品为中心”转移到“以客户为中心”了。而面对客户的多样化、层次化、个性化的需求,大众化营销已经失去了其优势,基于客户信息、客户价值和行为,深入数据分析的洞察力营销、精确化营销的理念逐渐被各大电信运营商所接受。商务活动的主动权被交到了客户手中,而保持原有的客户对电信公司来说变的至关重要。在过去多年中电信行业建立了计费帐务系统、综合结算系统、97系统、10000号系统、大客户系统等多种业务支撑系统,然而各个系统相对独立,数据分散不一致。这就产生了数据依赖系统存在、缺少完整统一的客户视图、数据共享缺少统一的标准共享困难、数据对闭环的业务流程支撑程度较弱等问题。基于此现状,电信公司确定整合客户数据并以客户为中心实行统一视图的目标,那么建设本企业的数据仓库就势在必行了,而同时保证数据仓库中数据的质量的有效性就成为了一个重点研究的问题。
科学决策是现代企业的管理的核心与基础,但高质量的数据是正确决策的前提。要提供有质量保证数据,数据的抽取、转换和装载过程特别是转换过程相当重要。针对电信业务种类多,业务更新快,数据来源广的特点,ETL过程就变得充满挑战性。
庆幸的是,已经有很多成熟的ETL工具,它们几乎能够自动完成数据的ETL过程。但用户显然不放心这样一个重要的过程对他们来说完全是“透明化”的,加上多用户多任务必然会带来线程(或进程)的同步或互斥问题。所以本文将以ETL框架设计为基础出发。同时为了便于理解整个框架,来详细介绍ETL过程管理的具体流程和方法。
同时,本文将流程的控制过程用可视化效果表现出来,提供流程定义和流程监控功
湖南大学毕业设计(论文)
能,并最终生成多维表。
第 2 页
1.2 国内外研究现状
在企业信息化建设过程中,随着技术的发展,原有的信息系统不断被功能更强大的新系统所取代,从两层结构到三层结构,从Client/Serve:到Browser/Server,在新旧系统的切换过程中,必然面临一个数据迁移的问题。
原有的旧系统从启用到被新系统取代,在其使用期间往往积累了大量珍贵的历史数据,其中许多历史数据都是新系统顺利启用所必须的。另外,这些历史数据也是执行决策分析的重要依据。数据迁移,就是将这些历史数据进行清洗、转换,并装载至新系统中的过程。数据迁移主要适用于一套旧系统切换到另一套新系统,或多套旧系统切换到同一套新系统时,需要将旧系统中的历史数据转换到新系统中的情况。银行、电信、税务、工商、保险以及销售等领域发生系统切换时,一般都需要进行数据迁移对于多对一的情况,例如由于信息化建设的先后,造成有多个不同的系统同时运行,但相互间不能做到有效信息共享,所以就需要一套新系统包容几套旧系统的问题。
数据迁移对系统切换乃至新系统的运行有着十分重要的意义,数据迁移的质量不仅仅是新系统成功运行的重要前提,同时也是新系统今后稳定运行的有力保障。如果数据迁移失败,新系统将不能正常启用;如果数据迁移的质量较差,没能屏蔽全部的垃圾数据,对新系统将会造成很大的隐患,新系统一旦访问这些垃圾数据,可能会由这些垃圾数据产生新的错误数据,严重时还会导致系统异常。
相反,成功的数据迁移可以有效地保障新系统的顺利运行,能够继承珍贵的历史数据。无论对于一个公司还是一个部门,历史数据都是十分珍贵的一种资源,如公司的客户信息、银行的存款记录、税务部门的纳税资料等。
早期的数据迁移工作往往是由程序人员手工编写存储过程完成的,对编写人员的技术要求很高,而且随着系统的升级换代、人员变动等原因使系统维护变得十分困难随着计算机技术的发展与进步,逐渐出现了使用特定的ETL工具来完成数据迁移过程。目前很多数据库厂商纷纷推出针对其数据仓库产品的ETL解决方案,如Oracle公司的Warehouse Builder等。这些工具具有功能强大,提供图形化界面以利于用户操作,易与第三方软件集成等优点,但其高昂的价格,复杂的操作往往让人望而却步。
表1.1对手工编码与使用ETL工具实现数据迁移工作进行了比较。
湖南大学毕业设计(论文)
表1.1 人工编码与ETL工具比较
对比项 灵活性 难易程度 管理和维护 性能和效率 开发周期 工作量 价格 最灵活 要求一定的技术水平 较难 取决于编写者水平 较长 较重 相对较低 手工编码 ETL工具 比较灵活 相对容易 容易 较高 较短 中等 较高 第 3 页
目前国内外关于ETL领域的研究非常活跃,主要涉及以下几个方面: 1、建立一种通用的与领域无关的工具框架;
2、在自动化异常检测和清洗处理间增加人工判断处理以提高处理精度; 3、对海量数据集进行并行处理;
4、如何消除合并后数据集中以及重复数据;
5、研究高效的数据异常检测算法以避免扫描整个庞大的数据集。
在我国,对ETL的研究开发甚少,还没有一个成型的、完善的ETL工具应用于数据仓库的系统中。
1.3 本文的主要研究内容和内容组织
本次设计主要采用的技术手段是:利用ETL在构造数据仓库中的原理,通过构造ETL数据流来实现数据的自动化处理,通过编写校验程序来处理数据流中非法数据,从而保证数据仓库中数据的高质量。
本文结构分为五章,第一章为绪论,主要介绍该课题的背景,过内外发展概况以及应用的技术以及论文的组织结果等;第二章为基础技术介绍,主要根据项目需要用到的数据仓库、ETL等技术做详细的介绍;第三章将根据EMC项目情况讲解ETL的应用情况;第四章重点讲解调度和校验过程,使读者能够更清晰的了解EMC项目中的实现方法;第五章将根据实际应用对提高数据质量的效果做进一步的说明并总结获得结论。
湖南大学毕业设计(论文)
第 4 页
2. 数据仓库以及ETL
2.1 数据仓库(Data WareHouse, DW)
目前,数据仓库一词尚没有一个统一的定义,著名的数据仓库专家W.H.Inmon在其著作《Building the Data Warehouse》一书中给予如下描述:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。数据仓库的概念可以从两个层次予以理解:首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。根据数据仓库概念的含义,数据仓库拥有以下四个特点:
1、面向主题:操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织。主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。
2、集成的:面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
3、相对稳定的:操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
4、反映历史变化:操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据
湖南大学毕业设计(论文)
第 5 页
仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。因此,从产业界的角度看,数据仓库建设是一个工程,是一个过程,而不是一个产品。
图2.1所示为数据仓库的基本体系结构图:
分析工具 归纳工具 … 数据挖掘 OLAP 数据集数据仓库 ETL 数据源 数据源 数据源
图2.1 数据仓库基本体系结构图
元数据 … 数据集1、数据源:是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;
2、数据的存储与管理:是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。
3、OLAP服务器:对分析需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP、MOLAP和HOLAP。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。
湖南大学毕业设计(论文)
第 6 页
4、前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。其中数据分析工具主要针对OLAP服务器,报表工具、数据挖掘工具主要针对数据仓库。
2.2 ETL(Extract, Transform, loading)
2.2.1 ETL简介
在数据仓库的构建中,问题最多,工作量最大的是从各种数据源抽取(Extract),转换(Transform)和装载(Loading)数据的操作。数据仓库中的数据往往来自不同时期,不同硬件平台,不同操作系统等,数据源的多样性造成了“脏数据”(Dirty data)的大量存在,这些“脏数据”产生的原因主要有:
1、数据库之间缺乏统一的标志,即表示同一对象的数据库记录的记不唯一; 2、不同组织采用不同的格式表示数据,这对数据的整合也造成一定的困难,典型的例子就是日期型的数据;
3、输入大量的数据时,总会或多或少出现一些错误;
4、存在不一致的数据。数据仓库要不断地装载这些存在“脏数据”的数据,如果不能保证装载数据的质量,那么势必会降低数据仓库中数据的质量,对数据仓库的后续操作造成影响,降低数据挖掘的质量。
为了提高数据质量,需要在数据源与数据仓库之间架一座桥梁,同时还要在桥梁上设立“检查站”,对经过的数据进行检查,去除不符合要求的数据,这就是ETL工具的功能。而把数据的ETL过程当成一个个进程或job,对其进行调度,就是ETL调度过程。
ETL是数据仓库获得高质量数据的重要环节,它是数据仓库中数据的入口,一个设计良好,功能强大的ETL工具和一个高效有效的调度模块对于构建一个数据清洁,结构良好的数据仓库有着重要的意义。
2.2.2 ETL过程特点
ETL的过程就是数据流动的过程,数据从异构数据源流向统一的目标数据库。其间,数据的抽取、清洗、转换和装载形成串行或并行的过程。ETL的核心是T过程,也就是转换,而抽取和装载一般可以作为转换的输入和输出,或者作为一个单独的部件,其复杂程度没有转换部件高。与OLTP系统中的单条记录的insert、update和select等操作相
湖南大学毕业设计(论文)
第 7 页
比,ETL过程一般都是批量操作,其装载多采用批量装载工具,一般都是DBMS系统自身附带的工具,例如Oracle SQLLoader和DB2的Autoloade等。下面从ETL元数据等几个方面探讨ETL过程的特点:
1、ETL元数据。元数据是描述数据的数据,它的含义非常广泛,这里仅指ETL的元数据,主要包括每次转换前后的数据结构和转换的规则。ETL元数据还包括形式参数的管理,形式参数是ETL单元定义的参数,相对还有实参,它是运行时指定的参数,实参不在元数据管理范围之内。
2、转换规则的定义方法。提供函数集,包括日期处理函数、字符串处理函数等。提供常用规则方法,提供规则定义语言的描述规则。
3、对数据的快速索引。一般都是利用Hash技术,将参照关系表提前装入内存,在转换时查找这个Hash表。Datastag中有Hash文件技术,Powermart也有类似的功能。
4、数据流程的控制。具有可视化的流程编辑工具,提供流程定义和流程监控功能。流程调度的最小单位是ETL单元实例,ETL单元是不能细分的ETL过程,该过程由开发者来控制,如可以将抽取、转换定义为一个ETL单元,但此时抽取和转换只能同时运行,而如果将他们分作两个单元,可以分别运行,这有利于错误恢复操作。ETL单元究竟应该细分到什么程度应该依据具体应用来看,目前还没有很好的细分策略。可以规定将装载一个表的功能作为一个ETL单元,但这样的ETL单元之间会有很多共同的操作,例如两个单元共用一个Hash表,则需要这个Hash表装入内存两次。尽可能将ETL单元的工作简单化、独立化是定义ETL单元的基本标准。
2.2.3数据质量保证
虽然数据清洗可以提高数据质量,但数据质量问题是无法根治的,只能采取特定的手段去尽量避免,而且必须要定义出度量方法来衡量数据的质量。对于数据源的质量问题,客户对此更加关心,如果在源头不能保证比较干净的数据,那么后面分析功能的可信度会大为降低。数据源系统也在不断进化过程中,客户的操作也在逐渐规范中。下面探讨一下对数据源质量和ETL处理质量的应对方法。
在数据仓库模型维表中,通常有一条记录,表示“未知”,“未知”含义过于广泛,任何可能出错的数据,NULL数据甚至是规则没有涵盖到的数据,都转成-1记录。这是一种处理脏数据的方法,但这也是一种掩盖事实的方法。例如写一个函数FileOpen(filename),没有返回标明错误原因的错误码而只返回一种错误码,如-1。显
湖南大学毕业设计(论文)
第 8 页
然这是一种不好的设计,对于调用者来说,需要依据这个错误码进行某些判断,不同的错误都有相应的处理逻辑。数据仓库中也是如此,所以,应该将不同的数据质量类型处理结果分别转换成不同的值,比如在转换后,-1表示无法关联,-2表示NULL数据等。这只是处理数据格式的错误,对于数据一致性和业务逻辑合理性问题仍有待进一步研究。
必须有一个数据质量的度量方法,对于数据质量有明确的定义。通常的席量方法是设定一个误差范围,例如指标的误差范围不能高于5%等,对系统本身来说必须要有这样的度量方法,但对于ETL过程中的数据质量,其度量方法更为严格,理论上,要求输入输出的指标应该完全一致。但是完全一致只是理想,有误差的数据不可避免。对于有误差的数据,必须找到原因。
对于ETL过程中产生的质量问题必须有数据验证机制,其目的是能够在ETI,过程中监控数据质量,产生报警。下面是保证数据质量的几点建议:
1、提供前端的统一界面。将开发实施人员当作用户,为之提供友好的用户界面。以OLAP的方式提供界面,将测试统计出来的指标结果反映给开发人员,使开发人员可以根据统计结果查找错误原因。
2、数据清洗框架的设计。数据验证不是一次性工作,而是每次ETL过程中都必须做的。因此,必须有一个框架,使验证过程自动化,并提供扩展手段,让实施人员能够增加验证范围。这样一个框架起到了规范化操作的作用,开发实施人员可以将主要精力放在验证脚本的编写上,而不必过多关注验证如何融合到流程中,如何展现等工作。
3、规范流程。很多ETL数据质量问题是由于人工处理导致的,其中最主要原因是流程不规范。对于同一个ETL过程,使用的ETL工具不同,实施的人员不同,产生的结果也会不同,因此有必要为ETL的开发与实施工作制定相应的操作和开发规范。规范流程是提高实施效率的关键工作。
2.2.4 元数据:拓展新星应用
对业务数据本身及其运行环境的描述与定义的数据,称之为元数据(metadata)。元数据是描述数据的数据。从某种意义上说,业务数据主要用于支持业务系统应用的数据,而元数据则是企业信息门户、客户关系管理、数据仓库、决策支持和B2B等新型应用所不可或缺的内容。
元数据的典型表现为对象的描述,即对数据库、表、列、列属性(类型、格式、约
湖南大学毕业设计(论文)
第 9 页
束等)以及主键/外部键关联等等的描述。特别是现行应用的异构性与分布性越来越普遍的情况下,统一的元数据就愈发重要了。“信息孤岛”曾经是很多企业对其应用现状的一种抱怨和概括,而合理的元数据则会有效地描绘出信息的关联性。
而元数据对于ETL的集中表现为:定义数据源的位置及数据源的属性、确定从源数据到目标数据的对应规则、确定相关的业务逻辑、在数据实际加载前的其他必要的准备工作,等等,它一般贯穿整个数据仓库项目,而ETL的所有过程必须最大化地参照元数据,这样才能快速实现ETL。
湖南大学毕业设计(论文)
第 10 页
3. EMC项目中的ETL应用
3.1 业务背景
电信行业内应用数据仓库技术意义非凡,由于电信业内早有大量成熟的数据库应用系统,如“电信业务计算机综合管理系统”、“本地网管系统”、“财务管理系统”、“计费账务系统”、“112障碍管理系统”、“收费销账系统”等,通过这些系统产生了大量的业务处理数据。而许多的历史数据都被存储在磁带、光盘中,或是分布在不同的硬件、数据库内,要查询一次历史数据时,费力费时,更不用说把不同业务部门的数据来关联比较分析了,同时也会遇到如数据类型不匹配、数据定义不同、数据不一致、数据冗余等多种问题。
如果我们针对电信业的特点和发展需求,对这些数据进行结构上的重组,按更有利于决策分析的角度去设计,就会使我们企业的宝贵资源——数据,实现真正的信息价值。根据行家们的预测,可以有几个方面分析。
1、固定电话话费行为分析
举个例子,固定电话的热装冷用一直是令各电信公司头疼的事,如果能对用户历年来大量的长话、网话和信息台的详细清单数据和用户的档案资料等相关数据进行关联分析,通过对用户的分类,从消费能力、消费习惯、消费周期等诸方面对用户的话费行为进行分析和预测,一定会为企业的相关解决措施提供依据和帮助。
对话费行为的分析还可以是通过对通话起止时间及通话时长分析可得到各类用户的通话时段分布情况及日消费高峰、月消费高峰;长话的消费时间、消费次数、什么地方的用户消费能力较高、什么地方的用户消费能力偏低;以及话费流失的分析。
2、优惠策略预测仿真
优惠促销固然可以开拓市场,但如果优惠策略不恰当,结果可能适得其反。利用数据仓库技术实现优惠策略在模型上的仿真,根据优惠策略进行模拟计费和模拟出帐,其仿真结果将提示所制定的优惠策略是否合适,并可按情况进行调整、优化,使优惠策略获得最大的成功。
3、欠费和动态防欺诈行为分析
欠费问题一直是电信面临的一个严重问题。催费、停机、拆机这样的举措是层出不
湖南大学毕业设计(论文)
第 11 页
穷,但对于恶意欠费的用户并不能制止,相反却会使一些偶尔欠费的用户怨声载道。
欠费和动态防欺诈行为分析就是在总结各种骗费、欠费行为的内在规律后,在数据仓库的基础上建立一套欺骗行为和欠费行为规则库,当用户的话费行为与该库中规则吻合或相似就发出告警,同时该系统还可以在此规则库的基础上分析各种欺骗和欠费行为,从而演绎出可能的欺骗和欠费行为,加以论证后自动加入规则库。另外,欠费和动态防欺诈行为分析不仅仅是被动式的预防分析,它可以主动地进行统计分析。欠费和动态防欺诈行为分析能及时预警各种骗费、欠费,使企业损失尽量减少。同时通过用户的缴费销账情况、社会类别、占用资源等,分析用户的信誉度,对不同信誉度用户给予不同的服务及优惠。
4、客户关系管理(CRM)分析
在电信行业内,赢得一个新客户比保留一个老客户所付出的代价要高得多。因此,提高服务质量,赢得客户的忠诚对企业生存发展意义重大。但是电信的客户群体非常庞大,而且客户对服务的要求也越来越高,作好服务工作不再是漂亮的营业员会微笑就可以完成的事了,必需要利用先进的数据仓库技术,对用户进行客户关系管理分析,也就是CRM(Customer Relation Manage)。具体内容包括:利用用户资料和一切可能有助于进行客户分析管理的资料进行客户概况分析,客户忠诚度分析,客户利润分析,客户性能分析,客户未来分析,客户产品分析,客户促销分析;通过对这些数据的分析,提供既能留住老客户又能吸引新客户的决策信息。
5、经营成本与收入分析
作为一个在市场经济中运作的企业,无疑以获得最大的经济效益为企业运作的核心目标之一,当然还应兼顾社会效益、客户服务等方面。经营成本与收入分析就是对各种类型的经济活动进行成本核算,比较可能的业务收入(通信业务收入、其他收益)与各种费用(业务成本、管理费用、税收、其他支出)之间的收支差额,分析经济活动的曲线,得到相应的改进措施和办法,从而降低成本、减少开支、提高收入。
6、网络管理和网络优化分析
中国电信目前大都建成了省网管中心和各地的网管集中操作维护中心,对网络进行管理,它们包含的数据是调整、优化固定网络结构,提高全网通话质量的根本依据。网络管理和网络优化分析就是在对目前网络管理中大量的数据进行分析、聚类,从而为提高全网质量、优化网络结构,进行网络规划提供可靠的保证。
湖南大学毕业设计(论文)
增加数据量;丰富统计分析类型。
7、动态报表
第 12 页
网络管理和优化分析将在以下三个方面对现行系统进行扩展:扩大并细化数据源;
由于业务和管理的需求不断变化,许多需求在系统设计之初不曾想到,报表输出已成为一个日益突出的矛盾,报表形成困难和制表人员工作量极大增加是目前亟待解决的问题。动态报表就是利用数据仓库技术中元数据的思想,将报表元素分解成基本构件,实现对数据按用户轴、时间轴、地域轴、通话类型轴等,对用户的呼叫量,消费量等进行分析统计,形成各种各样的报表即动态报表。
目前,应用数据仓库技术,改善企业决策支持模式,并取得最大的投资回报,已经成为大多数成功企业的共识,作为当今发展最快,吸收新技术最快的电信企业,原始数据正在快速地积累和膨胀,如何保存并利用好这些珍贵的资源,将其中蕴藏的信息转化为生产力,将成为业内人士所关注的又一个技术热点。
3.2实例概述
由于经营分析系统维护的主要工作量在ETL过程处理上,因此事先建立一个通用先进的ETL处理过程,将会给系统维护工作带来事半倍功的效果。
本章将通过对EMC产品实际系统进行分析对ETL进行详细的讲述,达到实现ETL过程图形化、流程化和可配置化的效果。图3.1为ETL过程总体逻辑图:
数据源配置生成任务生成数据校验报表地域\\状态合肥 西城区 庐阳区 东城区 瑶海区肥东县 三河区 城关区肥西县 长丰区 大沥区正常2725673730539783451154297560231329单停4221121811381349双停439117167251138任务调度执行检验规则任务调度引擎校验报表配置结果监控 图3.1 ETL过程总体逻辑图
湖南大学毕业设计(论文)
3.3总体流程
第 13 页
经营分析系统的数据来源于各源系统,并按层次分组处理,而实际上源系统是千差万别的,为了便于系统开发,数据源和各后续处理过程,设立了接口表层,将源系统中不同数据源在接口表层进行统一。图3.2概要描述了ETL的总体流程:
事实表EDM规范模型表数据集市表数据源接口表多维
图3.2 ETL总体流程
3.4接口表
接口表沿用营销分析时的标准,作少量调整,在ETL监控、管理过程中按业务、按层次模式展示。在监控界面可以查看各层状态。将本树状格式做成元数据,与ETL过程关联,每原子节点对应的任务需包含稽核、执行历史、执行状态三要素。如图3.3所示
按日产品接口表按本地网A本地网按业务帐户资源帐单„„稽核报表稽核确认历史查询状态查询按频率按月合肥-用户数稽核异常:长丰区正常用户数偏少 图3.3 接口表数据源树
接口表数据源树按配置的元数据生成,方便后续地域的变更和业务扩展。数据频率可以按日、按周、按月(甚至可以按3天)等,都根据配置实时生成。ETL程序根据配
湖南大学毕业设计(论文)
置的间隔时间取数据。
第 14 页
稽核报表按维度配置统计表,例如产品、资源按地域统计到达数、帐单按产品、地域统计量收,(选项需求:有历史数据可以增加统计的同比和环比)。
关于维度和代码的稽核,需要统计代码缺失、各代码值的记录分布、零记录数的代码。
状态与稽核报表的结果关联,由稽核人员评估。稽核报表举例:如表3.1所示。
表3.1 校验报表
地域\\状态 合肥 市区 长丰区 肥东区 肥西区 蚌埠 怀远县 固镇县 芜湖 南陵县 繁昌县 正常 2725 673 730 539 783 451 154 297 560 231 329 校验报表 单停 42 21 12 1 8 11 3 8 13 4 9 双停 43 9 11 7 16 7 2 5 11 3 8 稽核结果: ⊙正常 ○数据异常 异常说明(可空): 提交
3.4企业数据迁移(EDM)模型层
进入标准:接口层各原子节点对应的任务无异常。
EDM模型层按域-实体组织任务,采用统一模式(可以是定制的ETL程序或编写好的DataStage Jobs)从接口层处理数据,形成处理日志。EDM模型层的域-实体关系保存在数据库表中以生成处理过程的任务清单。
EDM模型层稽核采用处理日志评估模式。
处理日志记录了处理的数据源、目的表处理的记录数,正常信息、异常信息等内容。
湖南大学毕业设计(论文)
如图3.4所示:
角色EDM模型按域参与人按实体员工客户客户群„„第 15 页
图3.4 EDM模型图
稽核表举例:如表3.2。
表3.2 稽核报表
域――实体 TB_PRD_PRD_INST 处理过程 处理记录数:231,237 状态 正常 EDM模型层的任务调度由专门后台程序根据业务规则执行。这些业务规则以元数据的形式保存在一些表中。
3.5事实表层
进入标准:EDM模型层的各必要的原子节点对应的任务无异常。某原子节点是否必要,可在EDM模型层的域-实体关系保存的数据库表中描述。
事实表层按事实表组织任务,采用统一模式(可以是定制的通用事实表ETL处理程序)从EDM模型层处理数据,形成处理日志。要处理的事实表和处理逻辑保存在数据库表中以生成处理过程的任务清单。处理事实表的扩充可以增加一条记录描述事实表和处理逻辑,处理程序自动能处理并生成事实表。
通用事实表ETL处理程序可以借鉴四川项目组目前的锁定对象ETL过程模型的设计。
事实表层稽核采用处理日志评估模式。
3.6数据集市(DM)层
进入标准:事实表层的各原子节点对应的任务无异常。
数据集市层按集市表(DM表,一般表名以DM_开头)组织任务,采用统一模式(可以是定制的通用集市表ETL处理程序)从事实表层处理数据,形成处理日志。要处理的集市表和处理逻辑保存在数据库表中以生成处理过程的任务清单。处理集市表的扩充
湖南大学毕业设计(论文)
第 16 页
可以增加一条记录描述集市表和处理逻辑,处理程序自动能处理并生成集市表。
通用集市表ETL处理程序也可以借鉴四川项目组目前的锁定对象ETL过程模型的设计。
集市表层稽核采用处理日志评估模式。
3.7多维分析(OLAP)层
进入标准:集市表层的各原子节点对应的任务无异常。
主要为数据加载过程,如果OLAP使用ESSBASE,可以采用API编程实现,如果OLAP采用cognos,可以使用cognos数据加载脚本完成。
此步骤处理过程目前大多采用的是人工处理的方式,后续工作需要在自动化方面加强。
多维分析层稽核通过报表展现无错误实现。
3.8总体处理流程、反馈过程
整个处理流程由系统调度发起,在数据稽核环节暂停(后续可以设定自动稽核规则,满足规则的,可以自动通过稽核,这样只有异常的数据才需要人工干预),等待数据稽核岗确认后才往下走。
除稽核外所有流程都是可以配置且自动的,如没有异常,稽核人员只需要确认稽核报表就可以。
如图3.5所示:
湖南大学毕业设计(论文)
数据抽取岗数据稽核岗系统调度第 17 页
接口层抽取源数据否稽核源数据抽取源数据检查、修正源数据是稽核通过是对应到域-实体表EDM层上层问题是对应到域-实体表否稽核模型数据检查、判断对应问题稽核通过是是事实表层否形成事实表上层问题形成事实表否稽核事实表数据稽核通过是检查、判断对应问题数据集市层上层问题是否形成数据集市表形成数据集市表否稽核数据集市表稽核通过是检查、判断对应问题OLAP层上层问题是否加载OLAP数据形成数据集市表否稽核OLAP数据稽核通过检查、判断对应问题
图3.5 总体处理流程图
湖南大学毕业设计(论文)
第 18 页
4. EMC中数据调度校验的应用
EMC(ETL Manage Center)是我公司构建数据仓库自动化处理的重要产品。 由于数据仓库中数据质量的重要性,客户就会对数据转移过程提出实时监控、实时配置和实时查询等要求。面对庞杂多变的ETL任务,如何使这些任务能够有序无差错地执行,如何识别各种任务,将会是一个很大挑战性的问题。这一章就是就解决这个具体问题设定的。
4.1 需求分析
4.1.1 需求设计描述
EMC的ETL调度过程可分为前台功能模块和后台功能模块,前者是为最终用户提供友好的可视化界面以支持对数据仓库的数据准备阶段的实时监控和参数配置等要求,后者则提供任务调度和实例生成工作。而前台功能功能模块可进一步分为任务/任务组配置、任务实例监控、任务实例修改和日志查询,后台功能模块可进一步分为任务/任务组实例生成和任务调度。
4.1.2 功能性需求描述(按功能模块进行说明) 1、前台功能性需求描述: 任务/任务组配置
对任务进行注册/修改,指定任务的名称、路径、存放的主机、各任务参数类型等;对任务组进行注册/修改,指定任务组的名称、包含的任务、任务之间的执行顺序关系、各任务的参数值、任务组的启动周期或启动时间等。
任务实例监控
对在运行的任务实例进行监控,可以查询任务实例的状态。 任务实例状态修改
对任务组实例的任务实例运行状态进行修改。 日志查询
对任务实例日志(数据库)和过程日志(NFS映射的日志文件)进行查询。 2、后台功能需求描述: 任务组/任务实例生成
湖南大学毕业设计(论文)
任务实例调度
扫描任务实例表,调度上尚没有启动的任务实例。 4.1.3 非功能性需求描述
第 19 页
扫描任务组表,实例化符合启动条件的任务组,将任务组写入任务组实例表。
频度
ETL统一框架调度系统支持按天/月的抽取频度。
时间特性要求
ETL统一框架调度系统启动后会一直运行,只要一到任务组的启动时间,则产生相应的任务组实例和任务实例,只要还有尚未运行的任务实例,则会调度这些实例。
灵活性
1) 能够灵活配置任务和任务组。 2) 能够灵活支持不同频度的ETL任务。 3) 能够灵活重新运行已运行过的任务实例。
4) 能够灵活支持多主机调度,非常简易的增加新调度主机。 故障处理要求
如果ETL调度系统因某些情况出现崩溃后,在其重新启动后,能自动识别在崩溃前尚在运行的任务实例,并结束运行任务实例的运行,然后自动重新运行崩溃前需要运行的任务实例。
4.2系统总体设计
4.2.1 系统总体功能设计图
系统总体功能设计图如图4.1所示:
湖南大学毕业设计(论文) 数数第 20 页
数数/数数数数数数数数数数数数数数数数数数数数数数数数数数数数 数数/数数数数数数数数数数数数数……. 数数/数数数数数数数数数数数数数 数数1 数数n 图4.1 系统总体功能设计图
4.2.2系统总体功能设计图说明
此结构图说明了ETL过程的前台管理和后台调度过程。
在前台,用户可以直接对未运行状态的任务或任务组的相应参数进行配置,还可以了解ETL源数据处理状态(比如进度),还可以查询日志和进行任务实例的状态修改,这些操作都是在图形界面下进行的。这些操作可以直接在PC机或客户端下完成。
在后台,包含有任务调度模块和任务或任务组实例生成模块。这两个功能模块在主机上一直在运行,以完成各种任务需求。
在前台与后台操作中,都是建立在数据库基础上的,各种参数的生成和修改以及查询,都要数据库来实现。
湖南大学毕业设计(论文)
4.2.3 系统功能设计描述 任务/任务组配置
第 21 页
操作人员在前台界面要预先定义好数据抽取工作流所涉及的任务(ETL程序)及任务组。任务组包含了完成整个数据抽取所涉及的到的任务以及这些任务之间的关系(执行的顺序关系)。在配置好以后,操作人员在前台界面给指定的任务组的每个任务赋予参数,设置好任务组相应的运行时间
任务实例监控
操作人员可以在前台界面监控当前执行的每个任务实例的运行状态,及时了解任务实例的状况。同时操作人员可以修改任务组实例中的任务实例运行状态,以便操作人员可以重新运行某些已经运行完的任务实例。
任务实例状态修改
同时操作人员可以修改任务组实例中的任务实例运行状态,以便操作人员可以重新运行某些已经运行完的任务实例或者删除某些运行的任务实例或者整个任务组实例
日志查询
任务实例在运行时会生成相应的日志,显示了任务实例在运行时的状况信息,包括错误信息,操作人员可以通过在前台查询任务实例的过程日志,了解任务运行情况,对有问题的进行修改。
任务组/任务实例生成
在操作人员完成了任务组的配置以后,由ETL统一框架系统后台通过扫描数据库的任务组表,生成已经到了运行时间的任务组实例及任务实例
任务实例调度
在生成了任务组及任务运行实例后,ETL统一框架系统后台根据扫描得到的任务组实例,识别出任务组实例中各任务实例的执行顺序关系,按照串行或并行的方式调度相应的任务实例。
4.3 概要设计
4.3.1 概要功能设计图
概要功能设计图如图4.2所示:
湖南大学毕业设计(论文)
主机1写过程日志ETL进程1第 22 页
主机2ETL进程1写过程日志过程日志过程日志FORKFORK修改任务状态记录结果日志任务调度进程任务调度进程根据任务组启动条件实例化任务组读取需启动任务信息启动任务根据任务组启动条件实例化任务组读取需启动任务信息启动任务管理数据库NFS映射NFS映射日志保存任务组模板信息设定需启动的任务组修改正在执行的任务组状态查询任务组执行情况查询系统日志前台WEB程序 图4.2 概要功能设计图
4.3.2 功能性描述(按功能模块) 任务/任务组配置:
功能:对任务/任务组进行注册/修改,指定任务的名称、路径、存放的主机、各任务/任务组参数类型等。
湖南大学毕业设计(论文)
当提交时就把对任务/任务的维护结果写到后台数据库。
第 23 页
过程:1、在添加任务或修改任务/任务组之前,先对输入的数据有效性进行检验。2、
结果:1、当增加任务/任务组时,在数据库的任务/任务组表应该增加一条记录。2、当修改任务/任务组时,在那条相应的记录要做相应的修改。同样,删除任务/任务组就要求把那条记录从表中删除。
任务实例监控
功能:对在运行的任务实例进行监控,可以查询任务实例的状态。
过程:在点击了查询按钮以后,前台访问数据库的任务实例表,取出正在运行的任务实例纪录。
结果:前台将这些正在运行的任务实例纪录返回到界面。 任务实例状态修改
功能:对任务组实例中的任务实例运行状态进行修改。
过程:1、前台按照用户指定的条件查询数据库的任务实例表,并找到相应的记录。2、前台根据用户所选择任务实例及修改后的状态更新数据的任务实例表。
结果:1、返回用户查询的任务实例的各种状态。2、对数据库的任务实例的各状态字段进行更新。3、返回更新后的任务实例状态结果给用户。
日志查询
功能:对任务实例日志的过程日志进行查询。
过程:前台根据用户指定的查询条件查询数据库的任务实例日志表。 结果:将查询后找到的记录返回到前台界面。 任务组/任务实例生成
功能:扫描任务组表,实例化符合启动条件的任务组,将任务组写入任务组实例表。 过程:1、当程序刚启动,扫描任务实例表结束正在运行的任务。2、然后扫描任务组,取出所有属于自己但是未实例化的任务组。3、接着判断任务组中的每个任务有没有约束条件;如果有则判断所依赖的任务组是否完成;如果没有完成则从要实例化的任务组里面取出下一个任务进行判断。4、如果没有约束条件,则根据任务组启动的时间信息,判断是否可以实例化该任务组;如果时间信息不满足条件,则从要实例化的任务组里面取出下一个任务进行判断。5、如果时间信息满足实例化条件,则判断该任务组在该时间点有没有实例化过;如果有被实例化,
湖南大学毕业设计(论文)
第 24 页
则从要实例化的任务组里面取出下一个任务进行判断。6、如果没有被实例化,则实例化该任务组。当任务组被实例化后,则根据该任务组的组成生成每个任务实例。
结果:杀掉在程序刚启动时正在运行的任务实例、生成任务组实例和任务实例。 任务实例调度
功能:扫描任务实例表,调度尚没有启动的任务实例。
过程:扫描任务实例表取出所有未运行、回滚、待删除的任务实例,根据任务的状态进行相应的处理:1、如果任务实例的状态是待删除,则终止该任务实例,并修改任务实例状态为异常运行结束,并从符合条件的任务实例中取下一条记录来判断。2、如果任务实例的状态为回滚,则首先判断该任务实例所属的任务组是否有依赖条件,如果有依赖条件,则判断该依赖条件是否已经运行完成,如果没有完成,则从符合条件的任务实例中取下一条记录来判断。如果该任务实例有依赖条件,并且所依赖的任务组已经完成,或者任务实例没有依赖条件,则与任务实例状态为未运行的处理方式一样。3、如果任务实例的状态为未运行,则先判断任务实例中是否有相同的任务,如果有相同的任务并且任务的状态为正在运行、待删除、异常结束,则从符合条件的任务实例中取下一条记录来判断。如果已经完成,则判断该任务实例的后置任务是否已经完成,如果后置任务的实例状态为为正在运行、待删除、异常结束,则从符合条件的任务实例中取下一条记录来判断。否则,关联该任务实例的依赖条件,判断能否启动该任务实例。4、当扫描出来的任务实例都遍历完成后,判断任务实例中有无僵死进程,如果有,则终止所有的僵死进程。否则,扫描任务实例表,如果任务组中的任务实例都运行完成,则更新任务组实例的状态。
结果:修改任务组实例状态,修改任务实例状态,启动符合条件的任务实例和杀掉所有僵死进程。
4.4后台调度流程
4.4.1 ETL任务调度概述
所谓ETL任务调度,就是考虑到ETL任务的处理的多样性和复杂性,引入了job的概念,把ETL处理过程分成为一个一个的job。job可能是抽取、清洗、转换或加载,
湖南大学毕业设计(论文)
务的环境下处理好各种任务请求,专门设计的一个ETL调度功能模块。
第 25 页
也可能是PI加工。为了对复杂的ETL处理过程更好的调度和监控,为了在多用户多任
通过ETL高度系统的开发使用,不仅可以快速准确有效地处理ETL过程,还能提供更弹性的扩展空间。
4.4.2 任务/任务组实例化 实例化流程图如图4.3所示:
湖南大学毕业设计(论文)
提取数据的条数据库中的数据源是ETL流执行计划表etl_meta_schedule第 26 页
件:etl_meta_schedule.eff_state = ‘F0A’and 当前日期 >= etl_meta_schedule.eff_date and 当前日期 <= etl_meta_schedule.exp_date。守护进程每隔两分钟从数据库中提取数据到内存数据源提取数据内存:保存的提取出来的数据提取下一条记录一条记录没有调度记录了判断cycle_typeCycle_type!=0周期性计划?Cycle_type=0一次性计划顺序循环处理每条记录处理周期性计划处理一次性计划该调度信息处理结束结束图4.3实例化流程图
4.4.3 任务实例调度 调度流程图如图4.4所示:
湖南大学毕业设计(论文) 开 始第 27 页
根据步骤实例表中步骤的物理状态,中断运行所有“正在运行”的步骤实例将步骤实例表和步骤实例状态表中“正在运行”的步骤实例更新为初始化状态(步骤相关信息置空)主机ID、参数串、开始结束时间、PID、描述信息置空,物理状态为“等待运行”从步骤实例表中获取在某主机上的“待停止”和“待运行”的步骤实例结果集是否为空YSLEEP N SECN从结果集中取出一条记录记录是否取完YYN1根据该任务的约束条件决定能否运行步骤实例的物理状态是否为“待运行”N根据步骤实例的物理状态作出相应动作2 图4.4 调度流程图
湖南大学毕业设计(论文)
4.5后台校验流程
4.5.1功能
第 28 页
通过设置校验参数(校验名称、校验逻辑、校验指标等信息)和校验脚本(包括:SQL、DB函数、SHELL脚本、存储过程)来对流里面配置的节点进行校验,根据不同的校验脚本执行返回值以及校验逻辑来确定改任务的返回值,由此来确定该节点的状态。
4.5.2 数据结构 无 4.5.3 流程
校验流程如表4.1所示:
表4.1 校验流程
ID 1 流程步骤 根据“校验信息表”在内存中生成需要校验的“节点校验记录“ 内容概述 查询“校验信息表(META_STEP_INDI_REL)”,得到该节点的所有校验信息。查询条件为:tep_task_id = :g_nStepTaskID。得到的数据包括下列字段的值: STEP_INDI_REL_SEQ,AUDIT_CATG_ID INDI_SCRIPT_ID,NVL(SUCC_MSG,' ') NVL(FAIL_MSG,' '),AUDIT_LEVEL STEP_INDI_REL_ID 2 准备处理上一步产生的第一条“校验信息”记录 3 根据“脚本ID”记录查询“meta_indi_script表”取得脚本类型和脚本内容 SELECT script_type rule_script //脚本内容 FROM meta_indi_script where indi_script_id = :g_nIndiScriptID; 4 5 是否可以查到 程序退出 是走6,否走5 提示没有查询到第%d条script_type, rule_script记录%s,g_nStepTaskID=%d\\。退出 申明并打开游标,提取记录信息。
湖南大学毕业设计(论文) 6 7 判断脚本类型是否合法 删除该节点该帐期该指标过去的所有校验信息 脚本类型要在(1~4)之间 删除META_STEP_INDI_REL_INST表 META_STEP_INDI_LOG_DETAIL表 第 29 页
META_STEP_INDI_AUDIT_DTL表的相关信息 Where条件为: a.billing_cycle= :g_nBillingCycle) and (b.step_task_id = :g_nStepTaskID) and (a.step_indi_rel_id = b.step_indi_rel_id) and(a.step_indi_rel_id = :g_nStepIndiRelID)); 8 9 进行宏替换 用实际值替换脚本中的宏 判断脚本类型并调度脚本 根据脚本类型调度脚本,并根据脚本返回值确定g_nAuditState的值 10 调用setAuditState() 根据校验逻辑和脚本返回值确定校验返回状态nAuditState 11 调用updAuditState()修改meta_step_indi_rel_inst表中校验状态 UPDATE meta_step_indi_rel_inst SET audit_state = :g_nAuditState where ((billing_cycle = :g_nBillingCycle) AND (step_indi_rel_id = :g_nStepIndiRelID) AND (exec_counts = :g_nExecCounts)); 12 根据nAuditState确定程序返回值 根据nAudit的值确定g_nReturnValue的值 13 关闭日志文件,程序退出 fclose( fLog ); return g_return_value; 校验流程图如图5.5所示:
湖南大学毕业设计(论文)
开始 第 30 页
传入参数,包括:busi_flow_id,step_task_id,billing,_sycle,exec_counts 参数齐全否? N Y 连接DB 在表meta_step_audit中关联step_task_id取isneed_audit Is_need_audit=0? N 删除该step_task_id以前表meta_step_indi_log_detail和表meta_step_indi_audit_dtl的数据 Y 结束 从表meta_step_indi_rel取关联setp_task_id的indi_script_id ,audit_level,step_indi_rel_id 为找到或出错 1 2 3 4 初始化脚本返回值和程序返回值(都为0) Audit_level in(0,5)? =SQL替换rule_script中的宏;执行成功就将结果写入表meta_step_indi_audit_dtl中并设置脚本返回值为0;执行失败设置脚本返回值为1 根据indi_script_id关联取meta_indi_script表中的script_type,rule_script =DB函数 替换脚本中的宏;执行函数,出错就推出;未出错就将函数返回结果设置为程序返回值,将结果写入表meta_step_indi_audit_dtl。执行成功脚本返回值设置为0,如果失败并且函数返回结果为非0,则设置脚本返回值为2,否则设置为1 =DB存储过程,替换脚本中的宏;处理脚本并执行。将结果写入meta_step_indi_audit_dtl表。执行失败脚本返回值设置为1,成功则设置为0 =SELL,PRO*C程序,直接调用并执行脚本。将结果写入表meta_step_indi_audit_dtl。执行成功脚本返回值设置为1,失败就设置为0 Y Script_type大于4或者小于1成立? N 判断script_type
图5.5 校验流程图
湖南大学毕业设计(论文)
4.5.4重要函数 1、AllocDescriptors()
第 31 页
功能:为描述区SQLDA分配空间,设置最大的列数,或最大的变量数,给存放指示符变量值和存放数据的变量申请空间。
参数如表4.2所示:
表4.2 参数表
参数名称 size 参数类型 int 方向 输入 参数描述 第一个参数是SQL语句的最大列数或输入宿主变量的最大个数 max_vname int 输入 第二个参数,是指列名的最大长度,或参数名的最大长度 max_iname_len int 输入 第三个参数,是指指示符变量名的最大长度。 返回值如表4.3所示:
表4.3 返回值
返回值 0 -1 int int 返回值类型 描述 函数执行成功 函数执行失败 函数流程:
为SQLDA需要输入的动态参数分配空间。 为SQLDA动态查询的变量分配空间。 设置最大列数和最大变量数。
给存放指示符变量值和存放数据的变量申请空间。 异常处理:
1) 当给绑定变量分配空间出错时:
TRACE( \"[ERROR]Cannot allocate memory for bind descriptor.\"); return -1;
2) 当给选择变量分配空间失败时:
TRACE(\"[ERROR]Cannot allocate memory for select descriptor.\");
湖南大学毕业设计(论文)
return -1;
2、ProcessSelectList()
第 32 页
功能:在sql动态方法4中,专门处理选择区变量,如果不是查询语句,则设置F(即返回的列数)为0,如果是SELECT语句,则通过DESCRIBE函数返回列名、数据类型、长度和是否为NULL标志,调用InsertAuditDtl()函数保存校验数据。
无参数和返回值。 函数流程:
判断sql语句是否为select语句,如果不是则设置F(即返回的列数)为0。 如果是SELECT语句,则通过DESCRIBE函数返回列名、数据类型、长度
和是否为NULL标志。 设置最大列数为实际列数。
根据不同的数据类型给选择变量确定L值。
执行select语句,并将取出的数据循环处理,调用InsertAuditDtl函数将数
据结果保存到META_STEP_INDI_AUDIT_DTL表中。
异常处理:
1) 如果sql语句不是select语句时:
select_dp->F = 0; //设置实际选择的变量数为0 return ;
2) 当bind_dp->F < 0(实际的参数超出了预算的最大值):
printf(\"\\nToo many select-list items (%d), maximum is %d\\n\MAX_ITEMS); return;
3) 当变量的实际长度大于设定的绑定便利的最大长度时:
TRACE( \"select_dp->V[i]长度为%d,超过g_stIndiNodeValue值最大长度%d,从该字段起取数据失败sizeof(g_stIndiNodeValue)); bIsContinue = false; break;
3、SetBindVariables()
!\\n\strlen(select_dp->V[i]),
湖南大学毕业设计(论文)
语句的参数名、数据类型等信息存放在bind_dp中。
无参数和返回值。 函数流程:
设定绑定区变量的最大个数。
第 33 页
功能:在sql动态方法4中,专门处理绑定区变量,通过DESCRIBE语句,将处理
判断战位符的正确性,并设置占位符的个数为实际应用的个数。 根据不同的数据类型给绑定变量确定L值。 异常处理:
当bind_dp->F < 0(实际的参数超出了预算的最大值):
TRACE(\"\\nToo many bind variables (%d), maximum is %d.\\n\-bind_dp->F, MAX_ITEMS); return;
4、ProcessScript()
功能:用于处理SQL脚本,调用AllocDescriptors()为描述区分配空间,调用ProcessSelectList()处理选择区变量,调用SetBindVariables()处理绑定区变量
无参数。
返回值如表4.4所示:
表4.4 返回值
返回值 0 -1 int int 返回值类型 描述 函数执行成功 函数执行失败 函数流程:
为SQLDA分配空间。
调用SetBindVariables()函数,为设置绑定变量信息。 调用ProcessSelectList()函数,为设置选择变量信息。 释放分配的空间,提交数据库操作。 异常处理:
1) AllocDescriptors(MAX_ITEMS,MAX_VNAME_LEN,MAX_INAME_LEN) !=
0(为SQLDA分配空间失败时):
湖南大学毕业设计(论文)
TRACE ( \"[ERROR]为SQLDA分配空间失败!\"); Return 2;
2) Prepare语句出错时(预处理动态的sql):
TRACE
(\"[ERROR]
PREPARE
出
错
,
语
第 34 页
句%s,
err_msg=%s, %s\\n\ sqlca.sqlerrm.sqlerrmc,strMsg) ; Return 2 ;
5、GetIndiNodeID()
功能:在meta_indi_script_rel表根据indi_script_id取indi_node_id字段,多个indi_node_id之间以“-”进行分割,将取得的指标信息保存在stScript中提供给其他功能使用。
参数如表4.5所示:
表4.5 参数表
参数名称 stScript 参数类型 char * 方向 输出 参数描述 用于取得的脚本指标字符串 返回值如表4.6所示:
表4.6 返回值
返回值 stScript 返回值类型 Char* 描述 取得的指标字符串 函数流程:
取得指标的数量,并提取指标。
调用StringLink()函数将提取到的指标信息以“-”为分隔保存到stScript中。 异常处理:
1) 取指标个数操作出错或者没有查到数据时:
TRACE (\"[ERROR] 取IndiNodeID个数nIDNum出错, err_no=%d, err_msg=%s, %s\\n”, sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc, strMsg) ; EXEC SQL AT :g_szDb close cusor_script_id ; EXEC SQL AT :g_szDb COMMIT WORK RELEASE; exit (AUDIT_RESULT_FAILED) ; 2) 取指标操作中打开游标出错:
湖南大学毕业设计(论文)
err_msg=%s, %s\\n\EXEC SQL AT :g_szDb close cusor_script_id ; EXEC SQL AT :g_szDb COMMIT WORK RELEASE; exit(AUDIT_RESULT_FAILED) ; 3) 游标FETCH操作时出错:
TRACE (\"[ERROR]FETCH
游标
cusor_node_id
第 35 页
TRACE ( \"[ERROR]打开游标cusor_node_id 出错, err_no=%d,
出错,err_no=%d,
err_msg=%s,%s\\n\); EXEC SQL AT :g_szDb close cusor_script_id ; EXEC SQL AT :g_szDb COMMIT WORK RELEASE; exit(AUDIT_RESULT_FAILED);
6、InsertRelInst()
功能:在meta_step_indi_rel_inst表中插入校验产生的相关记录,包括: g_nInstID,g_nBusiFlowID,g_nStepTaskID,g_nBillingCycle,g_nAuditCatgID,g_nIndiScriptID, g_nExecCounts, sysdate, :g_nAuditState, :g_stAuditMsg, :g_nStepIndiRelID等信息。
无参数和返回值。 异常处理:
数据插入meta_step_indi_rel_inst表失败时:
TRACE(\"显示:插入meta_step_indi_rel_inst表数据失败:err_msg=%s\\n\sqlca.sqlerrm.sqlerrmc) ;
7、InsertAuditDtl()
功能:在meta_step_indi_audit_dtl表中插入校验产生的相关记录, 包括step_indi_audit_dtl_id, g_nInstID, g_nIndiNodeID, g_nIndiNodeSeq, g_stIndiNodeValue等信息。
无参数和返回值。 异常处理:
插入META_STEP_INDI_AUDIT_DTL表数据失败时:
TRACE (\"插入META_STEP_INDI_AUDIT_DTL表数据失败,事务回滚至没有插入任何数据前,err_no=%d,err_msg=%s\\n\sqlca.sqlcode,
湖南大学毕业设计(论文)
sqlca.sqlerrm.sqlerrmc ) ;
EXEC SQL AT :g_szDb ROLLBACK TO SAVEPOINT spoint;
8、updAuditState()
第 36 页
功能:将脚本返回值更新到meta_step_indi_rel_inst表中,即表中的audit_state字段,如果该记录不存在,则将该记录插入到meta_step_indi_rel_inst中。
无参数和返回值。 异常处理:
1) 更新meta_step_indi_rel_inst表时出错:
TRACE (\"[ERROR]更新sqlca.sqlerrm.sqlerrmc, strMsg ) ;
EXEC SQL AT :g_szDb COMMIT WORK RELEASE; exit(AUDIT_RESULT_FAILED) ;
2) 数据插入meta_step_indi_rel_inst表时出错:
TRACE(\"[ERROR]原来
INSERT INTO meta_step_indi_rel_inst
出
meta_step_indi_rel_inst
出错:%s,%s\\n\
错:%s,%s\\nsqlca.sqlerrm.sqlerrmc, strMsg);
EXEC SQL AT :g_szDb COMMIT WORK RELEASE; exit(AUDIT_RESULT_FAILED) ;
9、MacroReplace()
功能:替换脚本中的宏,支持替换的宏为:#MONTH_NO#,#DATE_NO#,#INSTANCE_ID#,#BUSI_FLOW_ID#,#STEP_TASK_ID#,#BILLING_CYCLE#,#AUDIT_LEVEL#,#BUSI_TYPE_ID#,#BUSI_LEVEL_ID#,#AUDIT_CATG_ID#,#SCRIPT_TYPE#,#INDI_NODE_ID#。
参数如表4.7所示:
表4.7 参数表
参数名称 stScript 参数类型 char * 方向 输入 参数描述 宏替换前的脚本字符串。 返回值如表4.8所示:
表4.7 参数表
返回值
返回值类型 描述
湖南大学毕业设计(论文) stScript char * 宏替换后的脚本字符串 第 37 页
10、setAuditState()
功能:根据脚本执行的返回值和校验逻辑来确定校验的脚本状态(nAuditState)。 无条件暂停audit_level=1:这种情况只要脚本执行正常都返回1(表示无条
件暂停),执行错误(sqlcode<0)都返回-1。
条件暂停audit_level=2:校验脚本适用 DB函数、存储过程和SHELL脚本;
执行正常,满足暂停条件返回1,(表示等待前台确认);不满足暂停条件,返回0;执行错误(sqlcode<0)返回-1,记录log_msg。
条件中断audit_level=3:校验脚本适用 DB函数、存储过程和SHELL脚本;
不满足中断条件,返回0;执行错误(sqlcode<0)和满足中断条件返回-1,记录log_msg。
输出信息audit_level=4:不管脚本执行情况如何都返回0,记录log_msg。 其他audit_level=5:返回audit_state=0。 无参数和返回值。 函数流程:
判断校验逻辑类型。 判断脚本类型。
根据脚本返回值确定nAuditState的值。
湖南大学毕业设计(论文)
第 38 页
5. 效果说明和总结
本文以某经营分析系统为例,先从源系统的数据抽取,再通过由接口层生成统一格式数据,接着逐层生成域-实体表、事实表、集市表,最后生成多维分析表并加截到数据仓库中去,本设计方案经过实践总结证明提高数据质量效果比较明显,基本能够保证数据质量的正确性。
接着,本文利用软件工程的思想,从需求分析、总体设计到概要设计的流程,逐步完成对EMC产品ETL框架结构的详细分析,并且着重介绍了后台的数据调度校验过程,并根据实例验证了EMC产品中所采用的调度校验过程的实用性和合理性。
湖南大学毕业设计(论文)
第 39 页
致谢
在完成毕业设计的研究过程中,得到了许多老师和同学的大力帮助和支持,在此我表示深深的感谢。
首先感谢申煜湘老师,本课题在选题及研究过程中得到申老师的悉心指导,没有申老师的支持,我不可能完成这个课题。同时正是在她的鞭策、督促、鼓励和实时提醒下,我才能及时完成开题报告、英语翻译和日志,并最终完成了毕业论文。
同时我要特别感谢我的公司导师董朝刚,张士龙。在实习这段时间里,他们对我的指导无微不至,只要我问到的地方,他们总是能结合其丰富的编程经验和渊博的理论知识在第一时间给我答案。
然后还要感谢大学四年来所有的老师,他们为我们打下计算机专业知识的基础;同时感谢大学四年来跟我一起成长的同学们,正是他们,为我营造了一个积极向上的学习环境,让我有了一种很健康上进的学习态度和责任心。
最后要感谢我的父母,他们给我最无私的爱,永远是我的精神寄托。他们不仅给我学习知识的机会,还教育了我学习如何做人。
湖南大学毕业设计(论文)
第 40 页
参考文献
[1] Steven Feuerstein, Bill Pribyl著, 林琪, 王宇译. Oracle PL/SQL程序设计(第二版)[M]. 北京:中国电力出版社, 2003.
[2] Thoms kyte著, 苏金国, 王小振等译. Oracle 9i&10g编程艺术——深入数据库体系结构[M]. 北京:人民邮电出版社, 2006.
[3] 于宁斌. AIX5L系统管理技术[M]. 北京:电子工业出版社, 2003.
[4] 王海亮. 精通Oracle 10g ProC/C++编程[M]. 北京:中国水利水电出版社, 2005. [5] Paulraj Ponniah著, 段云峰等译. 数据仓库基础[M]. 北京:电子工业出版社, 2004. [6] Paul Wilton, John Colby著. 敖富江译. SQL入门经典[M]. 北京:清华大学出版社, 2006. [7] 侯捷. More Effective C++ 中文版(简体)[M]. 北京:电力出版社, 2003.
[8] 张旭峰, 孙未未, 汪卫, 冯雅慧, 施伯乐. 增量ETL过程自动化产生方法的研究[J]. 计算机研究与发展, 2006, 43(6):1097-1103.
[9] 贾自艳, 黄友平, 罗平, 李嘉佑, 秦亮曦, 史忠植. 面向数据质量的ETL过程建模与实现[J]. 系统仿真学报, 2004, 16(5):907-911, 914.
[10] 斯沃兹著, 赵学良译. Unix系统简明教程(第2版)[M]. 北京:清华大学出版社. 2006. [11] good_old_times, derrick domino, stevetuf, Shamiul, BenTremblay. Extract, Transfer, Load[EB/OL]. http://wiki.ittoolbox.com/index.php/Extract,_Transfer,_Load.
因篇幅问题不能全部显示,请点此查看更多更全内容