第3章 数据仓库的基本原理
本章引言
随着计算机技术的飞速发展和企业界不断提出新的需求,数据仓库技术应运而生。传统的数据库技术是单一的数据资源,即以数据库为中心,进行从事务处理、批处理到决策分析等各种类型的数据处理工作。近年来,由于计算机和网络的应用,计算开始向两个不同的方向拓展,一是广度计算,一是深度计算。广度计算的含义是把计算机的应用范围尽量扩大,同时实现广泛的数据交流,互联网就是广度计算的特征,另一方面就是人们对以往计算机的简单数据操作,提出了更高的要求,希望计算机能够更多地参与数据分析与决策制定等领域。特别是数据库处理可以大致地划分为两大类:操作型处理和分析型处理(或信息型处理)。这种分离,划清了数据处理的分析型环境与操作型环境之间的界限,从而由原来的以单一数据库为中心的数据环境发展为一种以数据仓库为基础的体系化环境。
数据仓库是基于大规模数据库的决策支持系统环境的核心,是进行数据分析和决策制定的一种技术方案。20世纪80年代中期,“数据仓库之父”W.H.Inmon先生在其《Building the Data Warehouse》一书中是这样定义数据仓库的:数据仓库是一个面向主题的、集成的、随时间不断变化的、持久的数据集合,用来支持管理人员的决策。与其他数据库应用不同的是,数据仓库更像一种过程,是对分布在企业内部各处的业务数据的整合、加工和分析的过程,而不是一种可以购买的产品。
本章重点
● 数据仓库的体系结构及其特点
● 数据仓库的基本概念
● 数据仓库的特点
● 数据仓库的数据组织结构、形式等
● 数据仓库中元数据的管理
● 数据仓库中外部数据的存储、管理和作用
3.1 数据仓库的体系结构
在有关数据仓库体系结构的多种理论中,着眼于体系部件功能的“三层结构”理论得到了最为广泛的接受。
3.1.1 数据仓库体系的三个层次
作为企业实施决策的支持工具的数据仓库,其体系结构在理论上并没有固定、严格的规定,而是随企业规模、决策类型、数据特点的不同而改变。即使是得到了普遍接受的数据仓库“三层结构”理论,对三层的具体规定也并不统一,Jiawei Han和Micheline Kamber认为,三层的内容是指仓库数据库服务器层、OLAP服务器层和客户层,而Paul Gray Hugh与J.Watson则认为,数据仓库的三层是指数据与数据管理软件层、数据仓库层以及决策支持引擎/客户端层。从各部件的功能来分析,数据仓库在逻辑上可以分为三个层次,即数据获取/管理层、数据存储层与数据分析/应用层。数据仓库体系三个层次的划分,如图3.1所示。
图3.1 数据仓库的三层体系结构
1.数据获取/管理层
数据仓库中保存的业务数据内容来自多个数据源,这些数据源提供的数据并非全部都是理想状态的,这些数据源中的数据存在各种缺陷,必须经过适当的处理后,才可以导入数据仓库;同时,数据仓库中所存储的内容,也需要进行维护,来保证系统正常运行,这些都是数据获取/管理层所应完成的任务。该层主要负责的工作,具体如下:
① 数据仓库的定义与修改。定义数据仓库的数据来源、数据的组织方式,并根据决策的需要与环境的变化对数据内容进行修改,同时,对数据仓库中的元数据和外部数据进行管理。
② 数据的获取。根据已经制定的规则,定期从制定的数据源中抽取源数据,并按照规则对数据进行清洗、转换和集成,对数据仓库的内容进行校验和清理,核查数据的完整性和有效性,处理因数据的追加而造成的数据不一致现象,并及时清除失效数据。
③ 数据仓库系统的管理。根据既定的规则和实际工作情况,实施数据仓库的维护、安全管理、备份、恢复和日志记录等工作。
数据获取/管理层对于保证数据仓库的安全性、稳定性和有效性而言,具有十分重要的作用,但该层并不面向数据仓库的一般用户,其使用者是数据仓库的设计者和维护者。该层功能的实现,可以采用专门设计程序的方法,也可以部分借用一些通用的工具来完成。
2.数据存储层
数据存储层是数据仓库的主体,所存储的数据包括三部分,一是外部数据源抽取,经清洗、转换处理,并按主题组织存放的业务数据,二是数据仓库的元数据,三是针对不同的数据挖掘和分析主题而生成的数据集市。
对于不同规模和应用目的的数据仓库而言,数据存储层的构造方式不尽相同。用户对数据仓库的要求集中体现在两个方面,一是灵活性,即数据仓库可以提供多样的分析功能,以尽可能地满足用户的决策需求;二是高效性,即用户希望自己的分析需求能尽可能快地获得结果。为了兼顾这两点要求,有些数据仓库在数据存储层中,增加了“从属型数据集市”。在数据仓库的存储层中,从属型数据集市并不表现为一种简单的、以满足部门级的需求而构建的简单数据集合,而是数据仓库的一个子集,它与数据仓库所服务的某个主题相对应,是数据仓库中针对该主题的数据在逻辑上或物理上的分离。包含从属型数据集市的存储层,在处理针对某个特定主题的查询时,只需在对应的数据集市中进行检索,而不必检索整个数据仓库,这样可以明显提高系统的使用性能。
3.数据分析/应用层
数据仓库系统的数据分析/应用层,面向的是系统的一般用户,主要用来满足用户的查询需要,并以适当的方式向用户展示查询、分析的结果。数据分析/应用层主要包括以下功能:
① 查询/统计服务。为用户提供常规的查询检索、简单统计和报表等服务,这是数据仓库最基本的功能。
② OLAP服务。对于以多维数据集方式进行数据组织的数据仓库,OLAP是一种极为有效的分析方法,它通过上卷、下钻、切片、切块和旋转等操作,对多维数据集进行深入的分析。
③ 数据挖掘服务。数据挖掘服务是数据仓库系统的一种深层应用,它是从大量的、不完全的、有噪声的、模糊的、随机的数据中,提取出隐含在其中的、不为人们所知的,但又是十分有用的信息和知识的过程,按照Jiawei Han和Micheline Kamber的说法,就是从大量数据中开采出知识的过程。有关数据挖掘的内容,本书第6章将进行详细的讨论。
3.1.2 数据仓库体系结构的基本特点
为了鼓励使用系统技术组件中共同的模式,数据仓库体系结构必须提供其应具有的基本特性。这些特性对数据仓库系统来说并不是独一无二的,但对于数据仓库来说,这些特性有着及其重要的作用。数据仓库中存储的信息越有价值,保密工作就越重要。为了采取防范措施,通常是在网络层和后端数据仓库,基于桌面的授权控制,采用对工作组授权的方法,以防范有意的或偶然的攻击和破坏。体系结构的目的在于避免商业规则在其生命周期的循环中不断变化。因此,体系结构必须是灵活的,它必须能适应不断变化的商业规则和环境,允许对其进行有效的修改、指导和管理。在公司的兼并和收购已经相当普遍的今天,数据仓库还必须是可移植的,即系统的组件必须不需要大量的修改就可以在软硬件环境中安装。这就要使用开放的标准组件,因为它们具有可重用性高的重要特性。高度一致而松散连接的设计仍然有效,要求系统各个部分是紧凑一致的。其必须独立于接口,而接口则表示了其可以访问哪些协议。同时,它们应是松散地保持连接,因为一个组件的改变不会明显影响其他组件。数据应该隐藏在一致的接口之后。但是,应用程序编程接口(API)却可以访问并使用数据。通过预定义的接口、路径以及系统的其他连接,包括跨分布节点的连接,可以实现获取信息的功能。数据和事务在不同的供应商和实现环境下都能协同工作。同时,还应当隐藏复杂的实现过程,表现为简单的设计。另外,对于含有庞大数据量的数据仓库来说,可缩放性尤其重要。可缩放系统是指当增加系统组件来处理加大的数据量、用户和处理需求时,系统性能呈线性或近似线性的提高。在这种环境中,灵活性是可缩放性的对立面。在业务环境和卷目录不断发展的时候,性能会适度恶化,但不会突然崩溃,因此,有待于进一步的修正。总结数据仓库体系结构的基本特点,具体如下。
(1)安全性
在网络层和后端数据仓库,基于桌面的授权控制,防范有意或偶然的攻击和破坏。
(2)健壮性
能适应不断变化的商业规则和环境,允许进行有效的修改、指导和管理。
(3)可移植性
系统的组件无须大量修改就可以在软硬件上安装。
(4)开放性
使用公开的标准,独立于某个主导企业,或在主要的技术设计上代表事实标准,应用程序接口通过更改控制来发布和修改。
(5)一致性
单独的组件有定义良好的接口,不受其他组件实现改变的影响。
(6)可维护性
通过对由于环境的变化而改变或磨损的特性进行常规检查,系统的生命周期可以延长或不确定。
(7)可扩展性
系统组件可用于新的、不可预见的环境和状况。
(8)工具化
系统有内置传感器或数据收集设备,这样,如果出现问题,无须做大量工作就可以进行诊断。
(9)可重用性
组件定义良好,可以进行配置管理,并被证明可以用于其他环境。
(10)连通性
信息和功能可以通过预定义的接口、路径和系统其他地方的连接,包括跨分布式节点的连接得到。
(11)可缩放性
当增加系统组件来处理增大的数据量、用户和处理需求时,系统性能提高,并呈线性或近似线性增长。
(12)灵活性
面对不断发展的商业环境,性能逐渐恶化,但不会突然崩溃,有时间等待人们进一步改正。
3.1.3 数据仓库体系结构的计算模式
数据仓库体系结构的计算模式与客户机/服务器计算模式类似。后端进行数据存储,通常使用一个关系数据库;前端是桌面表示工具,用来分隔多维数据集,并聚合从数据存储库返回的数据;中间则是一系列的辅助工具导航、聚合、分析和元数据层。其本身相当复杂,但这样的设计却能隐藏复杂性,并向最终用户传送一个连贯一致的界面。通过在大型机上执行的计算周期,可以实现表示层、应用层、数据库层。而企业服务器层的表示、应用和数据库则都在后端。另外,表示层可以是中间层服务器的进程,例如所谓的X-Windows系统或者以上三个功能都可以利用OLAP工具在超级工作站上实现。而且,不同应用功能的分割可以在桌面上的胖客户以及后端数据库上的触发器之间分布,其中,胖客户包含了许多确认和应用逻辑以及进程(如存储过程)。最终,数据仓库通过应用OLAP服务来实现上述特性。
3.2 数据仓库的基本概念
通过对数据仓库体系结构的学习,大家可以大致了解数据仓库的基本轮廓和结构,下面将具体对体系结构中涉及的基本概念以及相关概念进行详细阐述,包括存储在数据仓库中的数据、对数据仓库的基本操作、数据集市以及其与数据仓库的区别。
3.2.1 数据仓库中的数据
1.数据
从业务系统中提取的或从外部数据源中导入的数据经过清洗、转化后成为数据仓库的原始数据,需要注意的是,它们是数据仓库数据的一部分,但不是全部。由于需要数据仓库进行OLAP分析和数据挖掘,因此需要在原始数据的基础上增加冗余信息,比如进行大量的预运算,建立多维数据集,以求迅速的展现数据。
2.源数据
源数据就是从系统外部数据源获取的同分析主题相关的数据。
对于一个好的决策,不但需要系统内部的信息,还需要来自系统外部的相关信息。比如,超市的采购部门要确定采购货单,不但要了解超市内部产品的销售情况,还需要了解市场上各种商品的价格水平、质量水平、竞争对手的采购信息等。因此,一个好的数据仓库系统必须综合考虑系统内部和外部的相关数据。
3.数据源
数据仓库不直接存储事务数据,数据仓库的数据来自组织的事务数据库和其他类型的数据。数据仓库必须将不同来源的数据聚集合并为结构等一致的数据集,使其能够准确反映该来源的事务运行情况和历史记录。
数据仓库中的数据往往来源于多个数据源。由于数据来源的组织或机构可能在长期的事务处理过程中随着数据库管理系统本身的发展,分成了从简单到复杂、从小型到大型的各种不同格式的数据;其中可能有大型关系数据库、对象数据库、桌面数据库、各种非格式文件等,同时这些数据还可能分布在各种不同的数据操作平台上,并通过网络分布在不同的物理位置;另外,数据仓库的数据源可以是递归的,即数据仓库的数据源可以是另外一个数据仓库(或数据集市)或OLAP服务器。在这些数据源中,所有用户感兴趣的数据都必须通过数据提取软件进行统一和综合,把他们提取到数据仓库中。数据仓库的数据源包括:① 流行的关系数据库系统:Oracle、Sybase、Informix、DB2等。② 传统的桌面数据库系统:Foxbase、Foxpro、VFoxpro等。③ 文件系统中的数据文件:UNIX、Windows等。④ 其他数据源:Word、Excel、PB、VB等。
4.外部数据
在数据仓库中组织的大部分数据是以业务系统为来源的数据,将它们称为内部结构化数据。内部是指数据来源于企业内部,主要描述的是企业内部的信息。结构化是指这些数据原先就存储在数据库系统中,对数据的存储结构和管理都有规则的形式。
企业是在竞争环境中求生存和发展的。因此,一个良好的决策系统必须既能使决策者了解企业内部的情况,又能使决策者参考企业外部的信息。把这些来自于企业外部,描述企业外部环境的数据称为外部数据。
与内部数据相比,外部数据有着许多独特的特点,这些特点包括:
① 企业内部的数据具有规则的形式,而外部数据的形式可能是多种多样的。
② 企业内部数据来源于企业内部的数据库系统,而外部数据的来源广泛。
③ 外部数据的使用上具有不可预测性。
从数据的格式上看,企业内部的数据通常具有规则的形式,而外部数据的形式可能是多种多样,比如:
① 文本。例如,企业数据分析员从报刊杂志上摘录的相关文章、国家的相关文件、企业和其他公司签订的合同、市场调查报告等。
② 数据表格。例如,今年同行业各企业的产值和利润,国家在相关产品上的税收情况等。
③ 图像。
④ 声音。由于多媒体技术的发展,图像和声音成为记录信息非常方便直观的方式。例如,专家的讲课录像、经验交流会的录音等。
从数据的来源上看,企业内部数据主要来源于企业内部的数据库系统,而外部数据的来源可以非常广泛,比如:
① 报刊文摘。
② 相关技术报告。
③ 市场竞争分析。
④ 国家的指导性政策文件。
⑤ 市场调查的结果。
从数据的获取上看,数据仓库系统可以定期从企业的数据库中提取需要的数据,而外部数据的提取是不可预测的,任何时候信息员认为某项外部数据对企业决策有用,都可以将其整理并收录进数据仓库。
从数据的使用上看,不同的外部数据使用的频度可能相差很大,数据仓库必须一直监控数据的使用情况,才能获得各种外部数据使用的频度情况,进而采用不同的存储策略。企业的内部数据比较规范,数据仓库比较容易对其进行监控。
5.非结构数据
相对于具有规则形式的内部结构性数据来说,没有固定的或统一的存储结构和管理规则的外部数据叫做非结构数据。事实上,外部数据中包含着大量的非结构数据。比如,图像和声音文件,它们的数据量可能很大,通常可以使用二进制大对象进行存储,当然也可以使用操作系统提供的文件系统来存储,而将文件在文件系统中的位置存放在数据表中。这类数据不像结构性数据那样,通过特定的数据表进行字段定义来存放,其管理方式也不是通过元数据来实现的。
6.元数据
数据是对事物的描述,“元数据”就是描述数据的数据,它提供了相关数据的环境。它用于告知用户数据仓库中有什么数据,这些数据来自何处等,也可以通过使用查询工具对元数据进行访问而得知数据仓库中有什么数据、在哪里可以找到这些数据、哪些人被授权可以访问这些数据以及已经预先求出的汇总数据有哪些等。元数据是数据仓库的一部分,它决定了数据分析的有效性。
数据仓库为企业管理人员的分析、决策提供统一的、集成的基础数据,包括企业内部各个部门当前及其历史上的细节性业务数据,以及为了进行分析决策操作而生成的分析型数据,是一个统一、集成、单一的庞大数据集合,需要借助成熟的数据库技术对其进行存储管理,即利用改造过的关系数据库系统来组织和管理数据仓库中的数据。首先需要定义数据仓库的数据模式,可定义一张表来存储从各数据源提取来的数据,但由于各数据源的属性名、语义、单位、长度等都不一致,因此,在数据提取过程中需要重新定义属性语义、统一属性标识、重新进行属性值的计算和单位换算等。所有这些信息就构成了元数据,即“描述数据的数据”,并保存在数据仓库的数据字典中。
元数据在数据仓库中数据的上层,用于记录数据仓库中对象的位置。元数据主要包含两类数据。一种是为了从操作型环境向数据仓库环境转换而建立的元数据,它包括所有源数据项的名称、属性及其在提取仓库中的转化,这种元数据记录的信息包括:
① 数据源系统:数据存取的规范、数据库文档、信息描述、安全性、数据所有者权限等。
② 数据处理过程:数据的抽取、加载、清洗、过滤、协调及完成处理所需遵守的规则。
③ 数据的刷新:数据刷新方式、刷新频率等信息。
另外一种在数据仓库中元数据,是用来与最终用户的多维商业模型和前端工具之间建立映射的,这种数据被称为决策支持系统(DSS)元数据,这种元数据记录的信息包括:
① 数据仓库中信息的种类、存储日志、存储格式。
② 信息之间的关系、信息和业务的关系、数据使用的业务规则。
③ 数据模型。
④ 数据模型和数据仓库的关系。
元数据是数据仓库的一个综合文档,是数据仓库的核心,通过元数据可以将数据仓库和复杂的数据源系统的变化隔离,是数据仓库开发和维护的一个关键因素,也是保证数据提取质量的依据。通常,数据仓库将建立专用的元数据库来存放和管理元数据。
3.2.2 数据仓库处理过程中的关键名词
在了解了存储在数据仓库中的基本数据类型以后,下面将沿着数据在数据仓库系统中进行处理的具体流向,来详细说明数据仓库处理过程中的一些关键术语。
1.数据提取(Data Extraction)
从数据仓库的角度来看,并不是业务数据库中的所有数据都是决策支持所必需的。通常,数据仓库按照分析的主题来组织数据,用户只需提取出系统分析必需的那一部分数据。例如,某超市确定以分析客户的购买行为为主题建立数据仓库,则开发人员只需将同客户购买行为相关的数据提取出来,而超市服务员工的数据就没有必要放进数据仓库。
现有的数据仓库产品几乎都提供各种关系型数据接口,提供提取引擎,从关系型数据库提取需要的数据。
2.提取仓库(Extraction Store)
在构建数据仓库时,从外部数据源提取的数据,在正式导入数据仓库前,应先存放在缓冲区中,以便进行数据清洗与转换,这一缓冲区就叫做“提取仓库”。
在数据仓库中,从不同来源、不同结构的外部数据源中提取的数据,相互间不可避免地存在着数据内容的缺陷和格式上的不一致,不能直接导入数据仓库,而应当暂时存放在系统的数据提取仓库中,以待进一步的处理。
3.提取日志(Extraction Log)
同数据库的日志类似,当从业务系统提取数据时,需要记录提取数据的过程,这个过程被记载在提取日志中。提取日志详细记录了数据的来源,数据的转化过程等,它是数据仓库元数据的重要组成部分,它对于保证数据质量非常重要,并且便于数据管理员验证数据的质量。
4.数据清洗(Data Cleaning)
数据仓库的外部数据源所提供的数据内容并不完美,存在着“脏数据”——即数据有空值、噪声等缺陷,而且在数据仓库的各个数据源之间,其内容也可能存在不一致的现象。为了控制这些“脏数据”对数据仓库分析结果的影响程度,必须采取有效的措施。为避免影响决策的正确性,将有噪声的、有空值的、错误的、不一致的数据在进入数据仓库之前予以更正或删除的过程,称做“数据清洗”(Data Cleaning)。对于任何数据仓库而言,为了确保数据仓库中数据的准确性,在从多个业务系统中获取数据时,清洗过程都是必不可少的。
对于不同类型的“脏数据”来说,清洗处理的方法是不一样的。对于空值来说,可以采取人工填补、统一补为常量、平均值填补等多种方法解决;对于噪声数据,可以用分箱或聚类等方法处理;而对于内容不一致的数据,则必须依据数据仓库所应用领域的特点,使用特定的方法解决。
5.数据转换(Data Transformation)
数据仓库的外部数据源,其文件格式、所依赖的数据库平台是多种多样的,以数据库平台为例,可以是Oracle、Sybase、Informix、IBM的DB2、Microsoft SQL Server等数据库系统中的一个或多个,甚至可能是文本文件。在建立数据仓库时,必须要对这些数据格式进行转换,统一格式。目前已经有一些大厂商,在其数据仓库的构建工具中,都提供了针对多种数据库系统的数据转换引擎,以简化数据仓库的构建工作。
对于文本文件等非结构化的数据源,在进行数据转换时,须根据实际应用,设计专门的“关键数据转换”程序。
6.数据存储(Data Repository)
数据仓库中的数据存储就是用于存放数据仓库数据和原数据的空间。数据仓库中数据的存储方式共有3种,分别是:多维数据库、关系数据库以及两种存储方式的结合。具体内容将在第5章OLAP的分类中做详细阐述。
3.2.3 数据集市(Data Mart)
数据仓库作为企业级应用,其涉及的范围和投入的成本常常是巨大的,它的建设很容易形成高投入、慢进度的大项目。这一切都是部门/工作组所不希望看到和不能接受的。部门/工作组要求在公司内部获得一种适合自身应用、容易使用,且自行定向、方便高效的开放式数据接口工具。与数据仓库相比,这种工具应更紧密集成、拥有完整的图形用户接口和更吸引人的价格。正是部门/工作组的这种需求使数据集市(Data Mart)应运而生。然而,业界在“数据集市应该是怎样的”问题上意见不一,各公司对它的定义差别极大。目前,对于数据集市大家普遍都能接受的描述简要概括为:数据集市是一种更小、更集中的数据仓库,它为公司提供了一条部门/工作组级的分析商业数据的廉价途径。
数据集市应该具备的特性主要包括:规模小、面向特定的应用、面向部门/工作组、快速实现、投资规模小、易使用、全面支持异种机平台等。
用户可根据自己的需求,以自己的方式来建立数据集市。不论是通过自上而下,还是自下而上的方式建立数据集市,最重要的是保证数据集市间能相互对话,彼此不能沟通的数据集市是没用的。另外,允许人们经WWW访问数据集市,使之为更多的用户提供数据访问,也是必不可少的功能。
决策就是依据某些数据,对企业现状进行分析,并决定采取相应的措施来推动企业的发展,但让决策者在浩如烟海的企业信息系统中找出这些数据可能并非易事。正是为了这样的目的,设置了数据集市。实际上,它就是为了满足各种特殊需要而专门设计的数据表的集合。特别是对一些需要紧急查询的内容设置这样的数据表,就更有必要。数据集市不是设置在每个主题内,而是设置在数据仓库的范畴内,也就是说,可以以分主题的方式,在对原来运行数据重组的基础上,为了满足某种支持决策的需求,再跨主题进行数据重组。可以想象,这给企业管理的发展,为业务重组而进行数据重组,创造了可持续增长的、无限的数据重组的广阔空间。
1.数据集市的概念
数据集市是为了制作某个特定的报表而需要的一张表或者一些表。数据集市提供了对数据的面向主题视点,和OLTP及数据仓库相比,数据量也要小得多。存储数据集市时,在线事务分析处理用户主要处理数据集市里边的数据。数据集市的表结构可能会非常简单,表的名字也可以和商业区域所包含的文件夹相对应,其中的数据项也可设计得比较易于理解。
需要注意的是,如果数据库管理员已经创建了友好、易懂的名字,那么数据项的名字应该就不成问题了。但事实上,在绝大多数的时候,必须亲自要求数据库管理员为某个应用改变一下表的名字。
数据集市是定时刷新的。如果企业有数据仓库,那么在大多数情况下,数据集市的数据都是根据数据仓库里的数据来刷新的,可以让数据集市成为企业的数据仓库的一个子集。如果没有数据仓库,那么可以通过OLTP系统来刷新数据,先制作和建立几个数据集市。数据集市是为制作报表的需求而经过优化的,这一点和数据仓库很相像。实际上,数据集市存在的目的就是制作报表和分析问题,从而为部门服务。
2.数据集市的分类
数据集市有两种类型,分别是:独立型数据集市(Independent Data Mart)和从属型数据集市(Dependent Data Mart)。
独立型数据集市的实质,是为了满足企业内部各部门的分析需求而建立的微型数据仓库。有些企业在实施数据仓库时,为了节省投资,尽快见效,针对不同部门的需要,分别建立起该类数据集市,以解决一些迫切问题。这类数据集市的服务对象层次较低,数据规模较小,结构也相对简单,大多没有元数据部件。这类数据集市也可以实施集成,以构建完整的数据仓库。
从属型数据集市的内容,不是直接来源于外部数据源,而是从中央数据仓库中得到。在数据仓库内部,数据根据分析主题,划分成若干个子集,进行数据的组织与存储。这种面向某一具体主题而在逻辑上或物理上进行划分所形成的子集,就是从属型数据集市。显然,这种结构仍能保持数据的一致性。一般情况下,为那些访问数据仓库十分频繁的关键业务部门建立从属的数据集市,这样可以有效缩小数据的检索范围,很好地提高查询的反应速度,达到明显提高工作效率的目的。在设计数据仓库的逻辑模型时,为保证结构清楚,降低数据冗余度,一般都按第三个范式(3NF:Third Normal Form)来设计。但在物理实现时,出于性能方面的考虑,常常要作非正则处理(De-Normalize),使得中央数据库的复杂性增加,不易维护,数据冗余大。因此,当中央数据仓库十分庞大时,一般不对中央数据仓库作非正则处理,而是建立一个从属数据集市,对它作非正则处理,这样即能提高响应速度,又能保证系统的易维护性,其代价是增加了对数据集市的投资。
下面,具体观察一下独立型数据集市与从属型数据集市的逻辑结构,比较二者的相似点与不同点,如图3.2所示。
图3.2 独立型数据集市与从属型数据集市的逻辑结构
图3.2左边描述了独立数据集市的逻辑结构,它的数据直接来源于各信息系统。许多企业在计划实施数据仓库时,往往出于投资方面的考虑,最后建成的就是这种结构的独立数据集市,用来解决个别部门比较迫切的决策问题。从这个意义上讲,它和企业数据仓库除了在数据量大小和服务对象上有所区别外,逻辑结构并无多大区别,也许这是把数据集市称为部门数据仓库的主要原因。关键问题在于:随着需求的增加,数据量也会迅速增加,系统规模将迅速扩大,是把原来的独立数据集市扩展成为企业的数据仓库呢?还是为各部门分别建立独立的数据集市,形成一个复杂系统?
复杂系统需要IT部门设计多个数据转换程序,把各种信息系统的操作数据转换到每个数据集市中,以便保持数据的一致性。显然,这种策略将使整个系统变得非常复杂难于维护,在投资方面更是得不偿失,因为硬件系统的投资成比例增加,软件方面的投资和维护方面的投资则成指数级增加。
既然这种分布式的独立的数据集市结构有诸多问题,为什么还有一些企业仍在这样做呢?其原因就是硬件平台或者数据库在扩展方面限制太多,并行处理能力不够,无法处理大量的数据,最后只能形成这种“不得已而为之”的局面。这个问题的解决,只能等到大规模并行处理技术发展到一定程度才能克服。
3.数据集市的优缺点
(1)数据集市的优点
① 对OLTP系统不会形成性能影响。
② 数据集市是一个商业区域的唯一数据源。
③ 数据集市是针对报表做过优化的。
④ 在数据集市里进行查询速度很快,因为它有专门创建的索引,帮助用户更快地提取所需要的数据。
⑤ 如果数据是直接来源于OLTP系统,那么建立一个数据集市的成本会比建立一个数据仓库要低许多,创建的速度也能快很多。如果需求增加,数据集市还可以作为未来数据仓库的原型。
(2)数据集市的缺点
① 数据集市的数据往往只能满足一些预定义的报表的需求。如果用户忽然决定要在报表里面加入新的数据,即使只是很小的一点改动,实现起来也是比较困难的。这需要通知数据库管理员,要求改变数据集市,甚至改变数据仓库的结构。
② 数据集市往往很难提供跨越几个商业区域的数据。这是由于商业规则决定的。比如,某公司在全球各个地方都有销售代理,并且在每个地方都建有一个数据集市。如果该公司决定,一个地方的人员不能查询另一个地方的数据,那么,公司的管理员将无法连接所有的数据。
③ 如果数据从一个OLTP系统获得,那么很难得到更多的历史数据。
④ 因为数据集市中的数据往往是另一个系统的一些数据的子集,所以通过数据集市查询得到的结果可能与在OLTP系统中查询得到的结果不一样。实际上,如果数据集市的数据来自于数据仓库,那么这些数据已经经过了两次处理。
4.数据集市与数据仓库的区别
数据集市是当前常用的一个术语。有人认为它与数据仓库的差别只局限在数据量的大小上。事实上,数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段;而数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,一般只能为某个局部范围内的管理人员服务,因此,也称之为部门级数据仓库。
(1)数据集市是数据仓库的子集
数据集市可以看做数据仓库的子集,也可以看做为原始的数据,在有些数据仓库实现中,数据集市就是指微型数据仓库,建立一个数据仓库的概念,同样适用于建立一个数据集市。有时候创建一个完整的数据仓库并不是很划算,因此,就使用了一个数据集市的方法。
数据集市包含一个单独的部门或者机构中的一个部分使用的共同数据,通常用于向组织中的职能部门提供信息。
数据集市也可用于划分数据仓库的数据以反映那些在地理位置上分离的企业,其中各区域都是相对独立的。例如,一个大型服务组织可以将地区运营中心作为独立的业务单位,每个单位都有自己的数据集市以构成主数据仓库。
数据集市有时设计为完全独立的数据仓库,作为分布式数据仓库的成员来构成总体结构。在另一些设计中,数据集市通过定时更新的方式从主数据仓库接收数据,在这种情况下,数据集市的作用通常被限制在客户端的显示服务。
数据集市是数据仓库的一个子集。随着各种各样的数据仓库系统应用的出现,存放于数据仓库的数据量越来越大,多用户和多处理请求导致一些用户进入数据仓库的需求和分析工作被推迟,进入数据仓库的竞争成为数据仓库的障碍。数据仓库随着负载的增加,性能开始降低,查询速度趋于缓慢。此时需要均衡负载,将一部分数据从数据仓库中转移到其他数据库中进行查询。常用到的方法是在公司或企业的各部门建立自己的数据库,里面只存放与部门相关的数据,这样各部门的查询转移到部门数据库中,从而减轻了数据仓库的压力。此时,部门数据库,即称之为数据集市。从本质上来看,它仍然是一个数据仓库,但其数据来源不是操作环境中的数据源,而是原数据仓库。实际上数据集市是数据仓库中的数据进行再抽取后得到的数据仓库,它的服务对象是部门级的决策支持系统应用。
(2)向数据集市分发数据仓库的数据
如果数据仓库的数据是在中央数据仓库中维护的,那么该数据准备好后被装入中央数据仓库中,然后再分发到本地的数据集市中。
大多数经理、计划者以及其他知识工作者都要使用存在于数据仓库中的信息。保留数据仓库仅仅是为了找到信息、将信息放置到一定位置、组织信息以便快速访问以及将其成果与合适的最终用户分析工具结合起来。数据仓库应用是一个典型的C/S结构。其客户端的工作包括客户交互、格式化查询及报表生成等。服务器端完成各种辅助决策的SQL查询、复杂的计算和各类综合功能等。目前,普遍采用三层结构的形式,即在客户与服务器之间增加一个应用服务器,它能加强和规范决策支持的服务工作,集中和简化客户端和数据仓库服务器的部分工作,降低系统数据传输量,因此工作效率更高。
(3)数据仓库和数据集市的建立
数据仓库有两种具体的实施方案:数据集市和集中式数据仓库。前者适用于单位较小、各部门数据量不大的情况,而后者则要满足企业内部各部门决策的需求。具体方案的选择,可根据实际情况灵活选择。
一般的思路是首先建立部门级应用的数据集市,在成功使用的基础上,再在多个数据集市上构筑面向企业应用的集中式数据仓库。集中式数据仓库和数据集市之间的主要差别不是尺寸的大小,而是涉及领域的范围不同,而且这种领域的差别往往会导致不同的框架结构。因此,正确选择是非常必要的。在整个业界对数据仓库建设缺乏成功经验的情况下,从个别数据比较规整的业务子系统入手,构造应用范围较小的、扩展性较好的数据集市,也许是最实际的。这种模型如图3.3所示。
图3.3 数据集市与数据仓库的模型一
数据仓库虽然不是一项新技术,但却是数据库领域的一个全新的应用范畴。因为有不同的应用需求、应用方向,在建设数据仓库的过程中,与以往开发管理信息系统等业务数据库系统有着不同的思路。在国内,由于国情的不同,又有具体的问题和障碍。但从总体上来看,在企业内部建设数据仓库、为决策人员提供各种有用信息的潮流是不可逆转的。这就要求在实际中结合国情,敢于探索。
尽管数据仓库系统每一个独立的组成部分涉及的范围都不大,但是数据仓库的体系结构同样可适用于数据集市。因为数据集市仅涉及一个主题区,所以通常涉及的数据源较少。数据源转换过程中很少发生(如果发生的话)数据源之间的冲突——相同数据元素有不同名称、使用相同名称的不同数据元素、本该为同类型的数据却取值类型不同等。由于数据集市较小,所以,它不需要大量的计算机资源,进行性能调整和优化也就不那么重要了。由于它的用户团体较小,所以它需要的培训和维护支持也较少。总而言之,尽管数据集市的体系结构在框图层上与数据仓库的体系结构相同,但与完整的数据仓库相比较,它更加简单。
SQL Server Agent和数据转换服务(DTS,Data Transformation Services)能够用于调度和完成数据转换,包括筛选出适用于数据集市的数据和更新数据集市中适当的表。收到中央数据仓库发送的新数据后,可以通过创建和调度DTS以更新数据集市中的OLAP多维数据集。
在某些数据仓库分发的情况下,也可以使用复制的方式协调和维护数据集市的数据。这种模型如图3.4所示。
图3.4 数据集市与数据仓库的模型二
3.3 数据仓库的特点
“数据仓库之父”W.H.Inmon在《Building the Data Warehouse》一书中列出了操作型数据和分析型数据的区别,如表3.1所示。二者的区别从根本上体现了事务处理和分析处理的差异。传统的数据库系统由于主要用于企业的日常事务处理工作,存放在数据库中的数据基本符合操作型数据的特点。而为了适应数据分析处理的要求而产生的数据仓库中存放的数据,基本符合分析型数据的特点。
表3.1 操作型数据与分析型数据的区别
进而,W.H.Inmon将数据仓库定义为,用于管理决策支持的面向主题的、集成的、随时间变化的、非易失的数据集合。在这个定义中,Inmon明确给出了数据仓库的四个重要特点,即“面向主题”、“集成”、“随时间变化”和“非易失”。
3.3.1 面向主题
“面向主题”是数据仓库中数据组织的最基本原则。以支持管理人员的决策为目的的数据仓库,所存储的数据必然围绕着某些具体的分析主题而组织,也只有以分析主题为依据来规划数据的组织,才能保证数据仓库的内容逻辑清楚、条理明晰、脉络分明,在操作上拥有较高的效率,避免大量的、无效的数据检索。
数据仓库中所谓的“主题”,是一个逻辑概念。在信息管理的层次上,主题就是从管理的角度出发,对数据进行综合分析而提取出的,需要做进一步分析的对象。数据仓库的构造过程,首先就是确定主题的过程。数据仓库的设计者必须明确该数据仓库所支持的决策内容,即数据仓库的用途,并将决策内容归纳为若干具体的、易于通过数据组织加以分析的主题。
主题的提取,必须体现出独立性和明确性的特点。即主题要有独立的内涵,各主题之间要有明确的界限,不能有依赖关系。要保证与主题相关的所有数据都能得到正确的组织,避免数据的缺失与冗余。
在数据仓库内部数据组织的层次上,主题体现为若干数据集合,每个数据集合内的数据,各自描述一个共同对象的某一特征。这些数据组合起来,共同形成对该对象的较为完整、一致、准确的描述,这一被描述的对象就是“主题”。
在构造数据仓库的过程中,确定了主题之后,就应对业务数据库的内容加以组织归类。需要指出的是,业务数据库的内容和主题之间并不体现出一一对应的关系,需注意以下问题:
① 数据库内容的适当分割。在业务数据库中,某些数据库的内容并不只属于一个主题。
② 数据库归属的多重性。由于主题之间存在一定的逻辑联系,有些业务数据库中的某些属性,可能对多个主题的分析有用。
③ 数据库的无效内容。并不是业务数据库中的所有内容都对主题分析有效。有些内容完全是为了便于进行业务处理而产生的,与任何主题都无关,在导入数据仓库时,应当予以舍弃。
3.3.2 数据的集成性
数据仓库中数据的集成性,是指在数据仓库的构建过程中,多个外部数据源内的类型不同、定义各异的数据,按既定的策略经过提取、清洗、转换等一系列处理,最终构成一个有机的整体。
不同于基于传统数据库的业务处理程序,数据仓库的数据并不直接取自业务的处理过程,而是在对业务数据库的内容进行处理后才得到的。传统业务处理程序的侧重点在于迅速、正确地处理所有业务,记录业务内容和处理结果,而不是对决策提供支持。数据仓库直接使用传统业务处理程序的处理结果,节省业务处理的开支,可将精力完全集中在数据分析上。
数据仓库从业务数据库中获取数据后,并不直接将其导入,而是要进行一系列的预处理工作,即对数据进行筛选、清洗和转换、综合等工作,以解决数据中存在的下列问题。
① 数据格式的差异。不同的业务系统,其数据库系统可能是不同的,而且即使是基于同一种数据库系统,同一属性在不同应用中的定义也可能是不同的。
② 计量单位不同。不仅在基于不同数据库系统的业务系统中,对同一属性的计量单位可能不同,就是在同一业务数据库的不同表中,对同一属性的计量单位也可能缺乏统一性,存在差异。
③ 数据代码的歧义。在业务系统中,有许多属性和变量本身并没有数字特征,必须用定义代码或枚举变量等方法在数据库系统中实现。不同的业务系统,定义的方法可能不统一,因此可能存在很大的歧义。
④ 属性名称的歧义。属性名称的歧义有两种,即一词多义与多词一义。
3.3.3 数据的非易失性
数据仓库中数据的非易失性,又称做数据的稳定性,它包括两方面的含义:一是指数据仓库内容的更新、追加等操作是不频繁的,一般根据既定的周期或条件阈值进行;二是指数据在导入数据仓库后,虽然也有删除、更新等操作,但决定这种操作的阈值条件是较难满足的,这种情况的发生是非常罕见的,可以近似地认为,数据一旦导入数据仓库后,就不再发生变化。
业务系统一般只需要当前数据,在数据库中一般也存储短期数据,因此,在数据库系统中数据是不稳定的,它记录的是系统中每一个变化的瞬态。
但对于决策分析而言,历史数据是相当重要的,许多分析方法必须以大量的历史数据为依托。没有历史数据的详细分析就难以把握企业的发展趋势,因此,数据仓库系统对数据在空间和时间的广度上都有了更高的要求。
由于数据一旦被导入数据仓库,就不再发生变化,所以,数据仓库可以看成是一个虚拟的只读数据库系统。数据仓库在数据存储方面是分批进行的,定期执行提取过程来增加记录,但是,这些记录一旦追加进来,就不再从系统中删除。正是由于数据仓库的这个显著的特点,使得数据仓库不需要在并发读/写控制上投入过多的精力,因为用户是以只读的方式访问数据仓库。
3.3.4 数据的时变性
数据仓库中数据的时变性,是指数据仓库的内容随时间的变化而不断得到增补、更新。尽管数据仓库和业务数据库之间有很大的区别,数据仓库不会随业务的发生而频繁地更新数据,但为了保证决策分析的正确性,对数据仓库的内容定期加以增补和更新是十分必要的。如果以过于陈旧的数据进行决策分析,必然会产生严重的误导。因此,数据时变性的实质,就是建立业务数据与时间的对应关系,即以时间为坐标轴,对既定时点的业务数据库生成“快照”,并将这些“快照”的内容经处理后导入数据仓库。可见,数据仓库中数据时变性的特点,在于其变化的间断性(周期性)。变化的周期因数据仓库主题的不同而各异,同时还与外部数据源的特征有关。各时点的“快照”综合起来,构成了数据仓库内容的动态连续变化图,即动画。周期越短,则动画的速度越快。数据仓库实际上就是通过记录系统的既定时间点的“快照”,并把这些“快照”连接成动画,来再现系统运动的全过程,从而为决策者在进行数据分析时,提供有效的依据。数据时变的“快照”如图3.5所示。
图3.5 数据时变的“快照”
3.4 数据仓库的数据组织
数据仓库的数据组织不同于传统数据库的数据组织。本节主要介绍数据仓库中数据的组织结构和组织形式,同时,详细介绍数据组织中的主要术语与关键技术,以加深读者对数据仓库基本特点的理解。
3.4.1 数据仓库的数据组织结构
在数据仓库中,数据采用分级的方法进行组织,除了元数据之外,业务数据一般分为四个级别,即早期细节级、当前细节级、轻度综合级和高度综合级。数据仓库的一个典型的数据组织结构,如图3.6所示。
图3.6 数据仓库的数据组织结构图
1.当前细节级
来自数据源的数据,所反映的都是当前的业务情况,因此,在导入数据仓库之后首先是作为当前细节级数据进行存储。这些数据的数据量较大,实时性强,是数据仓库用户最感兴趣的部分。当前细节级的数据,一方面依据数据仓库的既定规则,经过预处理,聚合得到轻度综合级和高度综合级的数据,另一方面,随着时间的推移,系统中的一些细节数据逐渐“老化”,成为很少会被用户使用的早期细节级数据。
2.早期细节级
一般而言,当前细节级的数据对于决策的支持程度,随着数据发生时间的久远而降低。为了有效控制数据仓库中当前细节级数据的规模,保证系统的运行效率,在设计数据仓库时,通常应结合业务的特点和系统硬件的水平,设定一个合理的时间阈值,将当前细节级数据中发生时间超过该阈值的部分,即已经“老化”的数据,转化为早期细节级的数据,并以合适的方式进行存储。此时,为了节省系统的存储空间,可以将这些老化的细节数据导出到备份设备上。
3.轻度综合级
为了有效控制数据仓库进行决策支持时的系统开销,对当前细节级的数据,通常以一定的时间段为单位进行综合。这一设定的时间段参数又称为“粒度”。以较小的粒度生成的综合数据,称为“轻度综合级数据”,其规模要远远小于当前细节级数据,因此,可以明显提高决策运算的效率。
4.高度综合级
以较长的时间段,即相对较大的粒度,对当前细节级的数据进行综合而形成的结果,称为“高度综合级数据”。高度综合级的数据内容十分精炼,可以认为是一种“准决策数据”。需注意的是,综合级别的“轻度”和“高度”只是一种相对的概念,二者之间没有绝对的界限。随着业务特点和决策类型的不同而变化,同时在轻度细节级和高度细节级内部,还可以做进一步的细分。
在数据仓库中,处理提取和综合后的数据,还包括具有重要作用的元数据,它描述的是提取和综合后的数据的组织方式,在数据仓库的基本概念中已经比较详细地介绍了元数据,当然,在随后的3.5节中,还将介绍对元数据的具体管理。
总之,数据仓库的这种组织方式的核心思想是在系统中保留最有可能被用户使用的数据,而用户很少使用的数据则备份出系统。
3.4.2 数据的颗粒度
数据颗粒度是数据仓库中极其重要的概念。由于数据仓库是面向OLAP(On-Line Analysis Processing,联机分析处理)和DM(Data Mining数据挖掘)的,对于OLAP和DM,数据颗粒度有不同的含义。
OLAP的一个重要的功能就是向最终用户呈现不同综合程度的数据。第一种粒度就是对数据仓库中数据综合程度的一个度量。
数据的综合程度不同,其数据量将相差很大。数据粒度越小,信息越细节,数据量越大。反之,数据粒度越大,忽略了众多的细节,数据量越小。
数据的综合程度还会影响数据的用途。对于多维查询来说,使用的可能是细节数据,也可能是综合性数据。当查询非常细致的问题,细节数据非常合适,而综合数据就不可能回答,因为数据的综合使得细节信息丢失。但是,在回答综合程度较高的问题时,使用细节数据将需要进行统计运算后才能回答,这将增加用户的等待时间,而使用综合数据则可以迅速地给用户以答复。
因为综合程度不同的数据其用途不同,所以,在数据仓库中多重的数据粒度是必不可少的。但是,由于数据仓库最主要的目的是反映企业整体信息和进行决策分析,回答综合程度较高的问题,如果为了回答许多细节问题,而使系统的数据量极度膨胀,从而降低系统的运营效率,就背离了系统建设的初衷,这也是需要在数据仓库数据组织方式中说明的,对细节数据和综合数据采用不同策略的原因。实际的工程项目中,可以将综合程度较高的数据存放在访问速率较高的磁盘上,而将细节数据定期导出到低速的磁带上。需要注意的是:从数据仓库中导出的数据仍然属于数据仓库,只是在存储介质上发生了改变。
粒度的第二种形式是针对数据挖掘的。在数据挖掘过程中,常常因为使用非常复杂的算法(如神经元网络等),而造成其计算的复杂度较高,如果将数据仓库中存放的巨量数据直接运算,则计算时间和空间复杂度将太高,以至于系统难于承受。因此,在进行数据挖掘时,需要对数据仓库中的数据进行抽样。粒度的第二种形式是指抽样率,即以一定的抽样率对数据仓库中的数据进行抽样后得到一个样本数据库,数据挖掘将在这个样本数据库上进行,具体过程如图3.7所示。
图3.7使用样本数据库进行数据挖掘
这种抽样的思想是合理的,因为进行数据挖掘是为了建立分析模型,反映事物发展的规律和趋势。由抽样带来的模型误差可以在模型建立之后,再次使用源数据对模型进行校验和调整,从而缩短模型建立的时间,提高模型的精确度。实际上,数据挖掘就是通过这样的循环来不断地改进分析模型,如图3.8所示。
图3.8 数据挖掘循环
在抽样中,需要注意确定合适的抽样率和抽样方法。过大的抽样率将浪费系统的计算资源,过小的抽样率可能使得样本数据集合太小,而不能反映源数据特征。经验证明,在源数据的数据量很大的情况下,抽样率可以选择为1/100或1/1000,源数据的数据量越大,抽样率可以越低。
评价抽样率和抽样方法是否合适,关键在于抽样得到的样本集合是否能够反应源数据集合的特征。一种常用的评价方法是通过比较样本集合间的数值特征来评价样本集合和源数据之间的相似性。比如,使用某种抽样方法进行随机抽样,得到样本1和样本2,然后,比较这两个样本集合之间的数值特征如均值、方差等,如果这两个样本的数值特征不类似,则应当继续抽样。等到抽样获得的样本4、样本5、样本6它们的数值特征非常地相似,则认为再继续进行抽样的样本集合的数值特征也都类似,并且同源数据具有类似的特征,抽样的过程到此即可结束,该过程如图3.9所示。
图3.9 数据抽样的评价方法
3.4.3 数据的分割
数据的分割是数据仓库中的又一重要概念。由于数据仓库中的数据量极大,数据量大使用起来会遇到很多问题,因此,对数据进行合理的分割进而进行处理是必不可少的工作。
所谓数据分割是指将数据分散存储到多个物理单元中,以便进行进一步的处理,从而提高数据处理的灵活性,达到以下目的:① 易于实现数据仓库的重构/重组。② 能够自由地建立数据库索引。③ 便于对数据进行顺序扫描。④ 易于实现数据仓库的监控和恢复。
数据分割后的数据单元称为分片。数据分割没有固定的标准,分割的依据和粒度应当根据数据仓库所在行业的特点来确定。常用的分割依据包括发生时间、地理位置、计量单位、数据额度。如果问题涉及的数量非常大,又须同时满足多个分析主题的需求,可以从多个角度进行分割。按照时间进行分割符合数据仓库数据随时间变化的特点,并且分割后数据分布比较均匀,所以它是最常用的分割方法。
数据分割可在系统层进行,也可在应用层进行。系统层进行的分割,大多依靠数据仓库所依据的数据库管理系统来完成,而应用层的数据分割,则体现在应用程序的设计过程中。无论在哪一层次上进行分割,对用户而言,这种分割都是透明的。
系统层的数据分割适用于定义相对稳定的数据环境。由于某些原因,接口库定义的改变,会导致数据仓库中数据定义的变化,应用层的数据分割能较好地适应这种情况,不必对物理存储中的数据进行全部重定义,同时,应用层的数据分割也可以很方便地实现处理集之间的转移。当然,应用层的数据分割对开发者的编程能力和业务水平有较高要求,实现难度较大。
检验数据分割有效性的最简便、最严格的方式是,看分割后的数据能否方便地建立新的索引,以满足分析的需要。有效的数据分割能够使数据更容易索引、监控和顺序扫描,并且重构、重组简单。其中,重构是分割的反面,而重组是对分割的数据进行新的组合。
3.4.4 数据仓库的数据组织形式
在介绍了数据仓库中的数据组织结构、数据颗粒度和数据分割之后,本小节着重讨论数据仓库在发展过程中,出现的几种不同的数据组织形式。包括简单直接文件、连续文件和定期综合文件三种类型。
1.简单直接文件
简单直接文件是数据仓库中数据组织的最简单形式,就是每隔一段时间,将业务数据库中的数据,以既定的方法导入数据仓库,并逐渐积累起来,进行“快照”并存储。在某种程度上,简单直接文件可以认为是业务数据库一系列“快照”的集合。
如果数据仓库导入数据的间隔时间参数固定为1天,这样的简单直接文件又称为“简单堆积文件”。有些行业,由于法定节假日不产生交易数据,不必形成快照,因此,在这些行业的数据组织中没有简单堆积文件。
2.连续文件
简单直接文件是一系列互相孤立的“快照”,因此,虽然具备了应有的细节,但却并不能直接为决策提供支持。将两个或两个以上简单直接文件合并起来的结果,称为“连续文件”。连续文件可以提供一段时间内的数据细节,并可通过不断追加同类简单直接文件的方法,丰富自己的内容。
3.定期综合文件
无论是简单直接文件,还是连续文件,随着时间的推移,其数据量都在不断增大,给数据处理带来困难。定期综合文件可以解决这一问题,这种文件的实质,是在简单直接文件的基础上进行综合统计运算。在这种数据组织方式中,数据按一定的时间单位(如日、月、季度、年等),进行综合统计,存储在不同的物理单元中,并每隔相应的时间段,对数据进行追加。例如,每月结束后,将该月的数据综合,形成新的月度综合数据文件,每季度结束后,将该季度的数据综合,形成新的季度综合数据文件,依此类推。
定期综合文件的组织方式使得数据量比简单堆积文件方式大大减小,但是由于数据被进行高度的综合,使得数据的细节在综合中丢失,而且综合的时间周期越长,数据细节的损失就越多。所以说,定期综合文件的形式是牺牲数据的细节换取数据量级的减小。因此,为保证定期综合数据的有效性和可利用性,要特别注意妥善设计数据综合的方法。
3.4.5 数据追加技术
数据的组织结构和数据的组织形式解决的是数据仓库数据的存储问题。数据追加是从数据库角度提出的,它解决的是在数据仓库初始数据转载后,如何再向数据仓库输入数据的问题。
如果数据库中的数据没有发生变化,则不需要对数据仓库进行追加,因此,数据追加实际上只增加在上次数据输入后数据库中变化了的数据。要完成数据追加的工作,最关键的是“捕获”数据变化,并将数据的变化记录下来。
1.时标法
最早提出的“时标法”其思想是为数据记录增加一个时间标记。当数据在上次数据导入完成后发生了变化,则修改这条记录的时间标记。这样,数据仓库在执行数据的导入工作时,数据库将会检索到具有新时间标记的条目,作为数据追加的内容。
但是,在时间的数据库系统中,通常没有专门的时间标记。数据库应用的设计者主要是从实现事务处理的功能角度来考虑问题,因此,数据库应用的设计者通常不会增加时间标记列,因为该列对于事务处理系统来说是不必要的。由于这些原因,时标法虽然简单,很难得到应用。
2.前后映像比较法
另一种简单的方法是前后映像比较法,其主要思想是:将上次执行完数据追加任务的数据库快照记录下来,然后,将其与要执行新的数据追加任务前的数据库快照进行比较,比较这两次快照的不同,来生成追加的内容,如图3.10所示。错误!
图3.10 前后映像比较法
这种方法简单,但是如果数据库的数量级很大,进行这样全数据库的比较将会耗费大量的系统资源和时间,所以这种方法并不实用。
3.DELTA文件法
DELTA文件法是从应用程序来感知数据变化的方法。其基本思想是:数据的变化是由数据库应用程序引发的,因此,数据库应用程序应当知道它修改了哪些数据,应用程序可以将它执行成功的修改操作记录下来,形成DELTA文件作为追加的内容,如图3.11所示。
图3.11 DELTA文件法
数据库的应用程序主要是为完成事务处理而设计的,要使所有的应用程序都支持DELTA文件的功能在实际应用中很难,因此,这种方法也没有得到实用化。
4.日志文件法
DELTA文件视图可以从能够感知数据变化的应用程序来生成追加文件,虽然这种想法很巧妙,但是它没有考虑到应用系统往往由不同的软件开发商开发,而很难对其进行统一规范的问题。
如果更进一步考虑能够感知数据变化的软件实体,就能够得到更好的答案。各个应用程序都是通过同数据库服务器进程通信来实现其数据访问功能,最终数据的访问和处理工作是由数据库服务器来承担,因此,数据库服务器能够感知数据的变化。如果数据库开启了系统日志,数据库服务器将会把它所执行的所有操作详细地记录下来。通过分析数据库日志来获取数据变化的情况即可,如图3.12所示。
图3.12 日志文件法
并非日志文件中的所有信息都是必须的,但是,通过分析日志文件可以减少工作量。虽然日志文件法需要对日志本身进行比较复杂的分析,但是,由于它能够极大程度地减少工作量,所以该方法得到了广泛的应用。
3.4.6 数据仓库中的数据清理
同任何系统一样,数据仓库系统中数据也具有自身的生命周期,数据仓库系统并不是只装载数据而不清除数据的系统。同样的,数据清理是数据仓库设计人员需要重点考虑的问题之一。
数据仓库的清理与普通系统中数据清理的含义有所区别。在普通系统中,数据清理意味着将数据删除,而数据仓库系统中清理并不是简单地删除,而是从细化级别的数据逐渐上升为高级综合度的数据,直到数据已经不再具备任何意义时被清除的过程。数据仓库中清理的过程如下:
① 数据从操作型环境进入分析型环境。
② 数据从细节数据逐渐转换为综合数据。
③ 数据从高速磁盘中转移到低速存储介质上。
④ 失去实际意义的数据,最终被清除。
这个过程实际上也是数据在数据仓库中的生命周期。
3.5 数据仓库的数据管理
通过前面的学习,可以清楚认识到在数据仓库里不仅存放着内部数据、外部数据、非结构数据,还存放着管理这些数据的元数据。但是,这些数据是怎样在数据仓库中实现有效的管理的呢?由于内部数据通过既定的规则和数据结构进行存储,通过元数据可以轻松实现对其管理,所以,本小节对内部数据的管理不再做具体展开,而将着重阐述元数据和外部数据、非结构数据的管理。
3.5.1 元数据的管理
被称为“关于数据的数据”的元数据,在数据仓库中是必不可少的,它起着举足轻重的作用。其重要性可以通过下面的两个具体例子来进行说明。
例如,图书馆中的卡片目录指出了图书馆内书的内容和位置,元数据与此非常相似,它能够指出数据仓库内各种信息的位置和含义。又如存储商品的大型货物仓库,要买东西的客户必须从仓库目录表上才能知道当前有什么商品,目录单提供所购商品的分类号及其价格,然后进行选择。一般来说,仓库管理人员接到一个含有商品分类号的订单后,就可实现销售活动。首先,到仓库的各个地方挑选出订单上的商品,然后归并到一起交给客户。另外,在给仓库上货时,应按目录号进行分类,然后存储到仓库中适当的地方。在以上过程中,商品的分类号和名称对于仓库的所有服务人员来说都是非常重要的。
一般情况下,元数据对数据仓库的以下对象和内容进行描述和定义:
① 数据仓库服务器、数据库、表、名称和概括的位置与描述。
② 用于自动分解的规则和商业维的层次,如产品、市场、账目图等描述。
③ 用于查看、修改、分配惯用的概括、计算及其他用户分析的个人、工作组和企业的安全性描述。
④ 对原始资料、别名信息的和转换的描述。
⑤ 概括算法、主体域定位、访问模式的描述。
⑥ 数据仓库表的相互映射、合并标准的描述。
⑦ 最终用户为更专业的数据标题和事实定义的习惯名称和别名。
⑧ 最终用户定义的惯用计算规则、提取历史数据、业主/服务员、引用表和编码数据、数据质量、计量单位的定义。
⑨ 数据仓库的表和属性的局部定义、表和列及其特征的物理定义。
元数据在数据仓库中还可以包含有助于以下任务的构件:运作资源的标识、属性到属性的简单映射、属性转换、物理特征的转换、编码和引用表的转换、修改关键字、使用的默认值、默认原因、从多个运作源数据库中进行选择的逻辑关系、使用的算法公式及改名等。
数据仓库中的元数据必须像卡片目录和仓库目录表一样含有它所管理对象的目录。最终用户可以通过目录经过选择来确定所需的信息。要完成该过程,必须知道信息在仓库中的位置。因此,元数据必须包含对所管理信息进行分类的功能(如卡片目录或仓库目录),这些功能必须包括以下几个方面:
① 它必须用做方位图,用于指示信息在仓库中的位置,该图对于以下几种人或程序来说是非常重要的:想要了解仓库内容的人,把数据仓库用作信息存储的商业应用程序;管理仓库数据的人;必须编写仓库查询软件和查询报表工具软件的开发人员。通常,目录表就是数据仓库数据库的模式,由于大多数数据仓库使用关系数据库管理系(RDBMS),所以该模式包括多种条目的定义,如表、列、视图、索引、强制因素、查询、存储过程、触发器、策略和数据库等。
② 理想情况下,数据仓库的目录必须具有对每个条目的两种定义——数据仓库技术需要的定义(如表名、表的主键、表的类型、列名、数据类型和默认值)和商业用户所需的定义。商业定义倾向于通用的商业术语和定义,它不受限于技术领域的界限(如长度限制、使用空间的无效性、字母数字字符等)。
③ 它必须提供一个能够从一种信息推导出另一种信息的规划蓝图,概括就是这种推导方式的一个范例。过去十年的历史数据可以根据分析的需要按年、月、季度进行概括,要对运作数据和历史数据增加时间属性,必须按目录表从元数据定义的时间域中获取。向输入的数据中增加其他属性也必须由适当的元数据进行描述。
④ 它必须为从运作的商业应用程序中提取数据并存入仓库的提取程序提供一个方案。提取程序员应弄清输入数据的结构和存储数据的目标数据库的结构,进行格式转换,提供默认值或取舍信息。
⑤ 它必须存储建立在仓库中的商业规则。商业规则是由单位建立的用于解决数据不一致性和实现商业政策的行为准则。不一致的和不兼容的数据在存储到数据仓库之前必须从运作的资源中进行“净化”,这时可以使用商业规则。
⑥ 它必须存储访问控制和安全性规则,确保安全性管理。访问控制和安全性依赖于元数据附带的权限。
⑦ 元数据必须随时跟踪修改过程。通常,一个公司多年来所收集数据的结构会发生变化,从1985年—1990年收集的客户数据与从1991年—1995年收集的数据在结构上可以是不同的,主要是因为支持订货处理的数据库和应用系统发生了变化。例如,当两个公司合并时,两个单位的信息系统在三年内就集成在一起,导致了不同的数据结构。
⑧ 元数据必须能够捕获修改后的历史数据。把更新的历史数据存为元数据的一部分,以便使用户能够确定数据的及时性和准确性。
⑨ 必须存储数据仓库的结构和内容。按一定的格式存储,以便使最终用户在提出一个需求之前就能确定其大小。
⑩ 将数据从运作环境移到数据仓库环境的集成和转移逻辑,必须能够用做数据仓库元数据的固定部分。
3.5.2 外部数据与非结构数据的管理
由于外部数据的来源非常广泛,如果不对进入企业信息系统的外部数据进行控制,就会出现在前面导论中说明的蜘蛛网问题。不同部门的信息员收录不同的外部信息,而这些信息之间可能有很大的差异,使得企业的信息使用者不能获得一致的数据,最终得到不同的结论。
外部数据经过统一的整理后,先放进企业级数据仓库,然后再放进部门级数据仓库,就能够为数据分析人员提供一致的数据。对于具有规则形式的外部数据,应使用处理内部数据类似的方法进行数据的清洗和集成。对于非结构化的外部数据,应当采用元数据进行管理。
数据仓库组织的“灵魂”——元数据,是数据仓库中非常重要的组成部分,其对外部数据进行管理的元数据和对内部数据进行管理的元数据的内容不同。对于外部数据,需要说明的元数据通常包括:
① 文件标识。文件标识是为了方便数据仓库对文件进行定位和检索。
② 数据进入数据仓库的时间。记录数据进入仓库的时间,有以下作用:① 数据分析员可以检索指定时间段内的外部数据。② 数据分析员可以在引用数据时附加上时间信息,使得数据本身的有效性得到保证。③ 可以为数据仓库的清理提供时间依据,以便对过时的数据进行清理。
③ 文件内容的描述。简单说明文件的内容,方便数据分析员使用。
④ 文件的来源。记录文件的来源非常重要,数据来源不同得到的分析结果也可能不同。
⑤ 文件的类别归属。根据企业对外部信息的需求情况对信息进行分类,以便于检索和管理。
⑥ 索引字段、文件的大小、相关引用。
⑦ 物理存储的位置、清理的时间。
合理整理元数据,可以生成通知数据。通知数据就是与用户相关的数据分类。当某个新的外部数据进入数据仓库时,系统可以查找通知文件和元数据来得知与该项新外部数据相关的人员,然后发送通知消息给这些数据分析员。
外部数据中包含大量的非结构数据。比如,图像和声音文件,它们的数据量可能很大,通常可以使用二进制大对象进行存储,当然也可以使用操作系统提供的文件系统来存储,而将文件在文件系统中的位置存放在数据表中。
实际上,并不一定要将所有的外部数据与非结构数据都存储在数据仓库中,只需将管理外部数据与非结构数据的元数据存储在数据仓库中,然后再根据外部数据的大小、使用频度、文件进入仓库的时间长短采用不同的存储策略,可以将文件较大、使用频度低、进入数据仓库时间较长的外部数据存储在比较便宜的介质上,比如磁带;而将文件较小、使用频度高、进入数据仓库时间较短的外部数据存储在高速磁盘上。这种处理的思路同处理内部数据是类似的,如图3.13所示。
图3.13 外部数据的存储策略
本章小结
有人认为,数据仓库是一种来源于各种渠道的单一的、完整的、稳定的数据存储,这种数据存储可以允许最终用户以一种他们能够在其业务范畴中理解并使用的方式提供给他们;还有人认为,数据仓库不仅是存储在一个地点的不同数据的大型聚合,还是一套查询分析和呈现信息的工具,能提供对用户数据以及组织数据的访问功能。
数据仓库是基于大规模数据库的决策支持系统环境的核心,是进行数据分析和决策制定的一种技术方案。与其他数据库应用不同的是,数据仓库更像一种过程,是对分布在企业内部各处的业务数据的整合、加工和分析的过程,而不是一种可以购买的产品。
数据仓库最根本的特点是物理地存放数据,而且这些数据并非是最新的、专有的,而是来源于其他的数据库;其建立并不是要取代原有的数据库,而是建立在一个较全面、完善的信息应用的基础上,用于支持高层决策分析,它是数据库技术的一种新的应用,用数据库管理系统来管理其中的数据。
通过本章的学习,大家可以了解数据仓库的基本原理,具体包括体系结构、功能、特点及数据仓库中的数据组织、数据管理等知识,掌握数据仓库与数据库、数据集市的区别和联系,对数据仓库有个全面的了解和认识。
本章习题
1.数据仓库的体系结构是怎样的?该结构有什么特点?其计算模式如何?
2.数据仓库中的元数据、数据源、外部数据是指什么?数据提取、数据清洗、数据转换、数据存储、数据集市分别是什么?分析数据仓库与数据集市的区别和联系。
3.经典的数据仓库定义是什么?简述数据仓库的基本特点。
4.数据仓库对数据是怎样分级的?其对数据组织的三种基本形式是什么?
5.什么是数据的追加和清理?
6.数据仓库对元数据是如何存储和管理的?
7.数据仓库为什么要存放外部数据?数据仓库是怎么存放和管理外部数据的?