技术元数据
⑴ 什么是数据库的元数据
按照传统的定义,元数据(Metadata)是关于数据的数据。在数据仓库系统中,元数据可以帮助数据仓库管理员和数据仓库的开发人员非常方便地找到他们所关心的数据;元数据是描述数据仓库内数据的结构和建立方法的数据,可将其按用途的不同分为两类:技术元数据(Technical Metadata)和业务元数据(Business Metadata)。
技术元数据是存储关于数据仓库系统技术细节的数据,是用于开发和管理数据仓库使用的数据,它主要包括以下信息:
数据仓库结构的描述,包括仓库模式、视图、维、层次结构和导出数据的定义,以及数据集市的位置和内容;
业务系统、数据仓库和数据集市的体系结构和模式
汇总用的算法,包括度量和维定义算法,数据粒度、主题领域、聚集、汇总、预定义的查询与报告;
由操作环境到数据仓库环境的映射,包括源数据和它们的内容、数据分割、数据提取、清理、转换规则和数据刷新规则、安全(用户授权和存取控制)。
业务元数据从业务角度描述了数据仓库中的数据,它提供了介于使用者和实际系统之间的语义层,使得不懂计算机技术的业务人员也能够“读懂”数据仓库中的数据。业务元数据主要包括以下信息:使用者的业务术语所表达的数据模型、对象名和属性名;访问数据的原则和数据的来源;系统所提供的分析方法以及公式和报表的信息;具体包括以下信息:
企业概念模型:这是业务元数据所应提供的重要的信息,它表示企业数据模型的高层信息、整个企业的业务概念和相互关系。以这个企业模型为基础,不懂数据库技术和SQL语句的业务人员对数据仓库中的数据也能做到心中有数。
多维数据模型:这是企业概念模型的重要组成部分,它告诉业务分析人员在数据集市当中有哪些维、维的类别、数据立方体以及数据集市中的聚合规则。这里的数据立方体表示某主题领域业务事实表和维表的多维组织形式。
业务概念模型和物理数据之间的依赖:以上提到的业务元数据只是表示出了数据的业务视图,这些业务视图与实际的数据仓库或数据库、多维数据库中的表、字段、维、层次等之间的对应关系也应该在元数据知识库中有所体现。
2.2 元数据的作用
与其说数据仓库是软件开发项目,还不如说是系统集成项目[1],因为它的主要工作是把所需的数据仓库工具集成在一起,完成数据的抽取、转换和加载,OLAP分析和数据挖掘等。如图1所示,它的典型结构由操作环境层、数据仓库层和业务层等组成。
其中,第一层(操作环境层)是指整个企业内有关业务的OLTP系统和一些外部数据源;第二层是通过把第一层的相关数据抽取到一个中心区而组成的数据仓库层;第三层是为了完成对业务数据的分析而由各种工具组成的业务层。图中左边的部分是元数据管理,它起到了承上启下的作用,具体体现在以下几个方面:
(1) 元数据是进行数据集成所必需的
数据仓库最大的特点就是它的集成性。这一特点不仅体现在它所包含的数据上,还体现在实施数据仓库项目的过程当中。一方面,从各个数据源中抽取的数据要按照一定的模式存入数据仓库中,这些数据源与数据仓库中数据的对应关系及转换规则都要存储在元数据知识库中;另一方面,在数据仓库项目实施过程中,直接建立数据仓库往往费时、费力,因此在实践当中,人们可能会按照统一的数据模型,首先建设数据集市,然后在各个数据集市的基础上再建设数据仓库。不过,当数据集市数量增多时很容易形成“蜘蛛网”现象,而元数据管理是解决“蜘蛛网”的关键。如果在建立数据集市的过程中,注意了元数据管理,在集成到数据仓库中时就会比较顺利;相反,如果在建设数据集市的过程中忽视了元数据管理,那么最后的集成过程就会很困难,甚至不可能实现。
(2) 元数据定义的语义层可以帮助最终用户理解数据仓库中的数据
最终用户不可能象数据仓库系统管理员或开发人员那样熟悉数据库技术,因此迫切需要有一个“翻译”,能够使他们清晰地理解数据仓库中数据的含意。元数据可以实现业务模型与数据模型之间的映射,因而可以把数据以用户需要的方式“翻译”出来,从而帮助最终用户理解和使用数据。
(3) 元数据是保证数据质量的关键
数据仓库或数据集市建立好以后,使用者在使用的时候,常常会产生对数据的怀疑。这些怀疑往往是由于底层的数据对于用户来说是不“透明”的,使用者很自然地对结果产生怀疑。而借助元数据管理系统,最终的使用者对各个数据的来龙去脉以及数据抽取和转换的规则都会很方便地得到,这样他们自然会对数据具有信心;当然也可便捷地发现数据所存在的质量问题。甚至国外有学者还在元数据模型的基础上引入质量维[6],从更高的角度上来解决这一问题。
(4) 元数据可以支持需求变化
随着信息技术的发展和企业职能的变化,企业的需求也在不断地改变。如何构造一个随着需求改变而平滑变化的软件系统,是软件工程领域中的一个重要问题。传统的信息系统往往是通过文档来适应需求变化,但是仅仅依靠文档还是远远不够的。成功的元数据管理系统可以把整个业务的工作流、数据流和信息流有效地管理起来,使得系统不依赖特定的开发人员,从而提高系统的可扩展性。