数据仓库的基本概念
数据仓库(Data Warehouse,缩写为DW或DWH)旨在创建一个集成化的数据环境,专注于分析并为企业的决策提供支持。它是为了生成分析报告和支持决策而设立的。
值得注意的是,数据仓库本身并不生成数据,也不需要消费数据,所有数据均来自外部,并对外部应用开放。这就是为什么它被称作“仓库”,而非“工厂”的原因。
基本特征:
数据仓库是一个面向主题、集成、非易失及时变的数据集合,旨在支持管理决策。
面向主题:
与传统数据库主要围绕应用组织数据不同,数据仓库则是以主题为中心。主题是一个抽象概念,代表企业信息系统中数据的综合、分类和分析利用。在逻辑上,它对应于企业某一宏观分析领域的分析对象。
集成性:
数据仓库的数据是通过对分散、独立和异构的数据库进行抽取、清理、转换和汇总而获得的,这样确保了仓库内数据的一致性。综合数据并非直接从原有数据库系统中获得,因此在数据进入数据仓库前,必须经过统一和综合,这一过程是数据仓库建设中最复杂和关键的步骤,其工作包括:
统一源数据中的所有矛盾,例如字段同名异义、异名同义、单位不一致等。此外,数据综合和计算的工作可以在从原数据库抽取数据时生成,但许多是在数据仓库内部完成的,即在数据进入仓库后进行综合生成。

数仓主题
非易失性(不可更新性)
数据仓库的数据反映的是相对较长时间内的历史数据,包含不同时间点的数据库快照及基于这些快照的统计、综合和重组结果。
数据的非易失性主要与应用相关。数据仓库的用户通常进行查询或复杂的数据挖掘,一旦数据进入仓库,通常会被长时间保留。虽然数据仓库中存在大量查询操作,但修改和删除操作相对较少。这意味着,数据经过加工和整合后很少更新,通常只需定期加载和更新。
时变性
数据仓库包含各种粒度的历史数据,可能与特定日期、星期、月份、季度或年份相关。其目的是通过分析企业过去一段时间的经营状况,挖掘隐藏的模式。尽管用户无法修改数据,但这并不意味着数据是永恒不变的。分析结果反映的是过去的情况,当业务发生变化时,挖掘出的模式会失去时效。因此,数据仓库的数据需定期更新,以适应决策需求。从这个角度来看,数据仓库的建设不仅是一个项目,更是一个持续的过程。数据仓库的数据随时间变化表现在以下几个方面:
(1) 数据仓库的数据时限通常远远长于操作型数据。
(2) 操作型系统存储的是当前数据,而数据仓库中的数据则是历史数据。
(3) 数据仓库中的数据是根据时间顺序追加的,并带有时间属性。
1. 数据仓库与数据库的区别
数据库与数据仓库的区别主要反映在OLTP与OLAP的不同上。操作型处理(OLTP)是针对具体业务在数据库中进行的日常操作,通常涉及少量记录的查询和修改,用户关注操作的响应时间、安全性、完整性和并发支持等问题。传统的数据库系统,如MySQL和Oracle等,主要用于操作型处理。
相较之下,分析型处理(OLAP)主要针对某些主题的历史数据进行分析,以支持管理决策。
需要明确的是,数据仓库并不是要取代数据库。数据库设计是面向事务的,而数据仓库则是面向主题的。数据库一般存储业务数据,而数据仓库则主要存储历史数据。
数据库设计旨在避免冗余,通常围绕某一业务应用进行设计,例如简单的用户表,记录用户名和密码等信息,符合业务应用,但不适合分析。数据仓库设计则故意引入冗余,以满足分析需求,依据分析维度和指标进行设计。
以银行业务为例,数据库是事务系统的数据平台,记录客户的每笔交易;而数据仓库作为分析系统的数据平台,从事务系统获取数据并进行汇总和加工,为决策者提供依据,例如某银行某分行一个月的交易量和当前存款余额。若存款和消费交易量均较大,可能需要在该地区设立ATM。
显然,银行的交易量庞大,通常以百万甚至千万次计。事务系统需要实时性,因此只能存储短期数据,而分析系统则需要提供关注时间段内的所有有效数据,这些数据量巨大,汇总计算可能较慢,但只要能提供有效分析数据即可。
数据仓库是在数据库普遍存在的背景下,为了进一步挖掘数据资源和满足决策需求而产生的,绝非是所谓的“大型数据库”。
2. 数据仓库分层架构
依据数据流入流出的过程,数据仓库架构可以分为:源数据、数据仓库、数据应用。

数据仓库
数据仓库的数据源自不同的源数据,并提供多样化的数据应用。数据从下层流入数据仓库后,向上层开放应用,而数据仓库则是中间的集成数据管理平台。
源数据:此层的数据未经过任何更改,直接采用外围系统的数据结构,不对外开放;为临时存储层,作为接口数据的临时存储区域,为后续的数据处理做准备。
数据仓库:也称为细节层,DW层的数据应为一致、准确且干净,即经过清洗(去除杂质)后的数据。
数据应用:前端应用直接读取的数据源;根据报表和专题分析需求生成的数据。
数据仓库从各数据源获取数据,以及在仓库内的数据转换和流动均可视作ETL(抽取、转换、装载)的过程,ETL是数据仓库的核心流程,维持着数据的新陈代谢,而日常的管理和维护工作大多集中在保持ETL的正常和稳定。
那么,为什么要对数据仓库进行分层呢?
通过空间换时间,利用大量预处理提升用户体验(效率),因此数据仓库中存在大量冗余数据。若不分层,源业务系统的业务规则变化将影响整个数据清洗过程,工作量巨大。通过分层管理,可以简化数据清洗的过程,将原本复杂的工作拆分为多个简单步骤,便于保证每个步骤的正确性。当数据发生错误时,通常只需局部调整某个步骤即可。
3. 数据仓库元数据的管理
元数据(Meta Data)主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。一般通过元数据资料库(Metadata Repository)统一存储和管理元数据,旨在实现数据仓库设计、部署、操作和管理的协同和一致。
元数据是数据仓库管理系统的重要组成部分,其管理在企业级数据仓库中至关重要,贯穿数据仓库构建的全过程,直接影响数据仓库的构建、使用和维护。
构建数据仓库的主要步骤之一是ETL,此时元数据发挥重要作用,定义了源数据系统到数据仓库的映射、数据转换规则、数据仓库的逻辑结构、数据更新规则、数据导入历史记录及装载周期等内容。数据抽取和转换的专家及数据仓库管理员通过元数据高效构建数据仓库。用户在使用数据仓库时,也通过元数据访问数据,明确数据项的含义并定制报表。数据仓库的规模及其复杂性与正确的元数据管理密切相关,包括外部数据源的增加或移除、数据清洗方法的变化、控制出错查询及备份安排等。
元数据可分为技术元数据和业务元数据。技术元数据供IT人员使用,描述了与数据仓库开发、管理和维护相关的数据,包括数据源信息、数据转换描述、数据仓库模型、数据清洗与更新规则、数据映射和访问权限等。而业务元数据则服务于管理层和业务分析人员,从业务角度描述数据,包括商务术语、数据仓库中有哪些数据、数据的位置及可用性等,帮助业务人员更好理解可用数据及其使用方法。
综上所述,元数据不仅定义了数据仓库中数据的模式、来源、抽取及转换规则等,且构成整个数据仓库系统运行的基础,将系统中各个松散的组件联系成一个有机整体。
数仓建模方法
数据仓库的建模方法多种多样,每种方法都反映了一种哲学观点,代表了一种归纳和概括世界的方式。常见的有范式建模法、维度建模法、实体建模法等,每种方法从不同角度看待业务中的问题。
1. 范式建模法(Third Normal Form,3NF)
范式建模法是构建数据模型时常用的一种方法,由InMon倡导,主要解决关系型数据库的数据存储,利用技术层面的方法。目前,我们在关系型数据库中的建模大多采用三范式建模法。
范式是符合特定级别的关系模式的集合。构建数据库时必须遵循一定规则,在关系型数据库中,这一规则即为范式。
