2011/01/08

数据仓库入门

最近我开始在某公司的BI部门实习,BI的全称是Business Intelligence,商务智能,个人感觉这个名字比较忽悠,就像云计算一样。我在实习的过程中主要是做数据仓库的项目。在这里记录一下自己的学习和实践。

数据仓库诞生的原因

随着时代的进步,许多企业都将信息技术运用于自身的生产、运营、销售等活动中。在这个过程中,企业积累了大量的历史数据,这些数据显然具有重要的价值。但是,由于数据的类型繁多,业务逻辑复杂,甚至各个部门采用不同的数据库管理系统,导致数据无法有效整合,无法为进一步的分析提供支持。另外,数据量的不断增长有可能导致数据库系统的性能下降。
所以,业界产生了数据仓库这种专门的技术来解决这一些列的问题。


数据仓库的定义

现在让我们来整理一下,数据仓库的输入是企业的各种数据。
我们希望通过数据仓库获取整个企业的信息,并且数据仓库能够确保数据的一致性,能够为决策提供支持。

Bill Inmon (数据仓库之父 http://en.wikipedia.org/wiki/Bill_Inmon ) 在1980年代提出了数据仓库的概念:"a subject-oriented, integrated, time variant and non-volatile collection of data used in strategic decision making".

我个人对数据仓库的理解是:一个旨在整合企业所有数据,为企业的决策提供可信数据的系统。


数据仓库的组成

一般来说,数据仓库有以下几个组成部分

操作源系统(Operational Source System)
这个部分相当于数据仓库的输入端,也就是企业在生产过程捕捉数据的区域,通常是一个在线事务处理系统OLTP(Online Transaction Processing),它会记录每一个事务的记录(Transaction Record)。

数据准备区域(Data Staging Area)
在操作源系统存储的数据每隔一段时间会送到数据准备区进行处理,这里是整个数据仓库的核心部分,里面的操作通常我们称之为ETL(Extract-Transformation-Load)抽取,变形和载入。
抽取是将数据源的数据载入到数据仓库。
变形有很多种,有数据清洗(将不合格的数据去除),装换格式,进行计算等等。最最重要的是,变形后,原本紧凑的,符合各种范式的数据将变成维度化(Dimensional)的数据。
数据仓库一般使用维度模型,这种模型是比起我们通常的数据库建模更强调数据模型的简单,易于理解,以后我会深入介绍。
载入是将变形好的数据存储到数据仓库的下一个部分。

数据展现区(Data Presentation)
经过ETL处理过的数据被存放在这个区域。这个区域是为各种查询,报表和分析提供支持。

数据获取工具(Data Access Tools)
用户通过这个工具来设计查询,报表并获取最终的数据。


数据仓库的特征

在这里简单罗列一些数据仓库(DW)和一般数据库应用OLTP的差别

OLTPDW
使命记录业务信息查询,分析历史数据
数据库操作增删改查都有对大规模数据的查询和分析为主,定期的插入、更新
数据库建模方式标准化模型

尽量遵守范式
维度建模
时间在保证事务acid的情况下尽快能的快尽可能的快
空间空间资源有限。

使用范式减少冗余。

OLTP的数据通常只存贮几个周到几个月
可以认为有无限空间。

为了快速查询,存在很多冗余。

专门存放历史数据。
复杂度数据库表结构复杂经过ETL后的数据一般是星型模型,更容易理解
数据操作简单源数据要经过ETL后才能进入数据仓库。复杂度被包含到了ETL中。

学习资源 参考资料

我的学习资料主要是Ralph Kimball (http://en.wikipedia.org/wiki/Ralph_Kimball )等著的《数据仓库工具箱》(Kimball's Data Warehouse Toolkit Classics)这套书:

http://www.kimballgroup.com/html/booksKimballClassics.html

这套书中总共有三本,第一本是《维度建模完全指南》,第二本是《ETL实践技巧》,第三本是《数据仓库生命周期》。
第一本有中译本,不过网上书店都没有卖了,貌似绝版了,计算机的好书好多都绝版了。
第二本网上有中文的pdf文档,不过翻译的质量不是很好。
第三本现在还能买到,是清华大学出版社出版的。

第一本书是了解数据仓库和维度建模的入门书籍,我现在就在看。
第二本书是讲ETL的,其中关于审计维,维度表和事实表数据推送的章节是重点。
第三本主要讲数据仓库项目管理的,内容比较泛,而且新手也不可能去管理项目吧,所以不推荐。


下集预告

下一篇文章会简单介绍一下维度建模,维度表和事实表。