摘 要: 设计了一个具有良好的可扩展性、通用性、友好的JSP操作界面和统一的元数据管理等特点的数据ETL系统。结合实例介绍了此系统在石化企业中的应用。
关键词: 数据仓库 数据挖掘 ETL JSP界面 元数据
数据ETL是一个来源于数据仓库的概念,指数据抽取(Extraction)、转换(Transformation)、清洗(Cleaning)、装载(Loading)的过程,是构建数据仓库的重要环节[1]。它从运作资源中抽取数据并按照一定的要求将数据进行转换和清洗,最后将高质量的数据装载到数据仓库或数据集市中,为更高层次的应用提供决策分析。不同的运用领域,数据ETL有着不同的内涵。因此通用的集成清洗方案受到了越来越多的重视。数据ETL在数据清洗工具的通用化、高效化和智能化上还有很多发展空间。
本文在开发某石油天然气公司的决策支持系统和远程监控数据挖掘分析系统的基础上,针对数据仓库和数据挖掘,设计并实现了一套通用的、可扩展的、具有可视化交互界面的ETL系统。
1 数据ETL工具通用框架
1.1 设计思想
一个好的ETL系统应该能适应各种操作平台,支持更多的数据源。一般企业都会面对并处理来自各种系统的数据源。现存的操作数据又存在很多质量问题,如:滥用缩写词和惯用语、数据输入错误、重复记录、缺损值、不同的计量单位和过时的编码等等。因此,异构多数据源的集成和数据清洗将是数据ETL所面临的两大问题。
某流程型企业的数据源分布和数据集成过程如图1所示。其中异构数据源包括实时数据库(Infoplus)、PMIS数据库。生产实时数据来源于实时数据库系统采集DCS上的现场数据。销售管理数据来源于包含IFS的设备模块、OA系统、生产管理系统、安全环保系统等整个企业的管理层应用系统(PMIS)。另外,一部分历史数据可能会以纯文本的形式存放,同时,决策分析所用的一部分中间数据存放在Oracle数据库中。随着生产网络化的日益发展,大量的数据也会以XML的形式存放。
因此,ETL系统应该对以上各种数据源类型都能有很好的支持。
一般的数据ETL工具较多针对数据仓库,但这类ETL工具在其他领域中的应用往往不够灵活。为了实现ETL系统的通用型和实用性,需要在系统框架上进行更灵活的设计,使之既能针对数据仓库实现数据的转化,又能针对数据挖掘解决数据预处理方面工作。
同时,为了更好地管理和维护ETL系统,也需要有完善的元数据对系统的支持。元数据能对整个系统,包括数据抽取任务、数据ETL类库等进行统一的管理和维护,并沟通用户与系统之间的交流。
1.2 ETL框架及模块说明
针对上述设计思想,本文设计了一个ETL通用框架,如图2所示。现将其各部分功能详述如下:
(1)数据抽取。通用数据接口能够跨平台跨网络访问数据,支持不同类型数据源间建立连接,通过它可以屏蔽各种数据源之间的差异,为后序工作提供一个统一的数据视图。目前已有多种可选的通用数据访问接口,如ODBC、OLEDB、JDBC等,其中JDBC支持跨平台访问及网络访问数据。考虑到实际情况,本文采用JDBC和ODBC相结合的技术,使用SQL、PL/SQL和JAVA的完整功能,对外部数据源进行访问。
数据抽取通过通用数据访问接口访问各种异构数据源,并将数据抽取成统一格式的标准数据集。标准数据集的设计是为了实现数据标准化,从而进一步实现ETL系统的通用性和可扩展性。
(2)标准数据集。标准数据集是作为系统内部交换的一种统一的数据结构。有了标准数据集,ETL系统就更易于扩展。所有抽取出来的数据在系统内部都表示成这种统一的数据结构,而所有数据转换数据清洗算法的输入输出数据都按这种数据结构形式来组织。
图3中InputData类是本ETL系统的标准数据集结构。Item类表示项,其中itemName指项名,itemValue表示项的值,是一个ArrayList格式的数组。InputData类与Item类属于面向对象中的依赖关系。InputData类中,name属性是数据集的名字,owner属性是数据集的用户,createDate是数据集的创建时间,items是数据集的项,是由若干Item对象组成的一个HashMap。从中不难看出,Item对象对应于数据表中的一列,而InputData对象对应于由若干项组成的一个数据表。
有了这样的标准数据集结构,当需要扩展更多的数据转换、清洗、装载类的时候,只要这些类能满足标准数据集接口,就能够无缝地扩展到ETL系统之中。
(3)数据预处理、数据集成和数据归约。这是ETL系统的核心部分,是数据转换和数据清洗的过程。
数据预处理负责对抽取到的数据进行初步的清洗,解决一些数据的简单变换问题,如数据类型转换、日期时间格式转换、字段解码、数据缺失值的简单处理等,也为后面的数据复杂转换和数据集成做准备工作。
经过数据抽取后可以得到多个模式和多个实例数据集。然而数据仓库和数据挖掘需要的是集成的、语义一致的数据。因此必须将多模式与数据集进行统一映射,转换为单一的结果集。这就是数据集成的过程。在此过程中,首先应该将各种不同的数据进行元素化,得到格式统一的数据结构;继而进行数据标准化,消除不一致的缩写、简写等;然后进行数据的一致性校验,在内容上修改各种错误。
经过数据集成后的数据集中还包含许多相似重复记录,它将严重影响数据仓库的语义一致性,因此必须消除。在数据规约过程中,首先针对数据集进行匹配,即发现重复异常,然后根据匹配结果进行处理,删除部分记录或者将多个记录合并为一个更完整信息的记录。
值得注意的是,数据转换和数据清洗并不是孤立的,而是渗透在整个数据抽取、数据装载甚至整个数据ETL过程中。
(4)数据装载。数据装载通过通用数据访问接口将标准数据集装载到目的数据库中。
清洗后的数据结果集根据不同的需要,可以选择装载到数据仓库中去,或者直接提供给数据挖掘做决策分析,或者存储在中间数据库中作为数据样本集供日后数据分析所使用。
(5)ETL类管理。ETL类管理是数据ETL系统元数据管理的一部分。元数据管理将在下文中再做说明。
ETL类库中包括了所有的数据抽取、数据转换/数据清洗、数据装载类,每一个类可以实现一定的功能。用户就是通过调用ETL类库中不同的数据抽取类、数据清洗类和数据装载类来实现一次完整的ETL过程。
数据抽取类、清洗类和装载类分别具有统一的接口。用户可以根据数据抽取类接口、数据清洗类接口和数据装载类接口来开发自己的数据ETL类,以实现更多的功能,并利用ETL类管理将新开发的类注册到元数据库中。
值得注意的是,在一次ETL过程中,可能需要多次数据清洗操作,每个数据清洗步骤之间可以通过数据清洗类的源数据(输入)和目标数据(输出)进行连接,即通过数据流进行彼此约束。
(6)流程控制与用户可交互界面。一个好的ETL系统需要有友好的可视化工作界面。用户通过可视化的工作界面,根据任务的需要和界面向导的提示,调用合适的ETL类,从而控制ETL工作流程,实现整个数据ETL工作过程。
2 ETL元数据管理
元数据是关于数据的数据,对于ETL来说尤其重要。ETL中大量的数据源定义、映射规则、转换规则、装载策略等都属于元数据范畴。如何妥善地存储并管理这些信息已经关系到ETL过程能否顺利完成,而且影响到后期的使用和维护。
构造元数据主要包含两方面:建立元数据模型和建立元数据管理系统。元数据管理系统主要完成二部分工作,一是维护元数据的物理存储,二是提供定义、修改、访问元数据的接口和工具[3]。本ETL系统的元数据模型包含数据元数据模型、ETL类元数据模型。使用Access数据库作为元数据的物理存储数据库,这样便于数据ETL系统的移植。
采用面向对象的方法设计ETL元数据。元数据对象类中包含了该对象的各种属性和方法,属性表达了该元数据的某方面特征值,而方法定义了对相关元数据的各种操作[4]。元数据类在实现上分为个体类和集合类二种。个体类主要设置或读取元数据的各个属性值,存取或更新元数据表中的单个记录。集合类包含了个体类对象的集合,负责对整个源数据表进行存取和更新,并维护各元数据类之间的一致性。个体类对应于元数据表中的一条记录,集体类对应于一个元数据表。一个元数据库中通常包含多个元数据表,分别存储各类元数据的详细信息。
为了实现客户端对元数据请求的快速响应,这里将主要的元数据都保存在服务器的内存中。当ETL系统服务器启动时,系统就将主要的元数据从元数据库中读出,并常驻在内存中,直到服务器被关闭。
3 ETL流程控制与用户可交互界面及应用
采用JSP网页技术来开发可视化的工作界面。JSP技术具有系统的多平台支持、强大的可伸缩性、通过网络发布实现远程监控等特点。在运行过程中,JSP服务器访问元数据库,向客户端展示数据源类型并列出各种数据源所采用的不同的数据抽取函数类、数据清洗类和数据装载类,用户根据JSP页面向导提示,选择合适的ETL类,逐步完成数据ETL全部过程。
基于上述技术开发了某石油天然气公司的决策支持系统和远程监控数据挖掘分析系统。在其数据ETL部分,首先选择数据源建立数据连接。JSP服务器访问数据源,并向客户端展示其数据结构,供用户选择需要抽取的数据表和数据列。当所需要的数据集抽取完后,服务器访问元数据库,调出当前ETL类库中的所有数据清洗算法,每一个算法都配有相应的算法描述供用户参考,用户选择适当的数据清洗算法对数据集进行转换和清洗。清洗成功后,将最后的结果集保存到目的数据库中。
4 结束语
本文从实际角度出发,设计出了一个面向数据仓库和数据挖掘的数据ETL系统,提出了一个可扩展的通用数据ETL框架,利用JSP网页技术来设计与用户可交互的工作流程控制界面。实践证明:本ETL系统是可用的、有效的,在数据仓库和数据挖掘的应用中,显示了其一定的灵活性和高效性。今后的工作重点将放在增量式的数据抽取、高效的数据异常检测和清洗算法的研究上,不断地充实并完善这个数据ETL系统。
参考文献
1 张宁.数据仓库中ETL技术的研究.计算机工程与应用,2002;38(24)
2 周宏广,周继承.数据ETL工具通用框架设计.计算机应用,2003;(12)
3 廖磷,王立刚,刘文煌.构造数据仓库系统的元数据.计算机工程与应用,2001;(16)
4 贾自艳.面向数据质量的ETL过程建模与实现.系统仿真学报,2004;(5)
5 郭志懋,周傲英.数据质量和数据清洗研究综述.软件学报,2002;13(11)