“操作系统的用户推动组织的运转。他们接受订单,注册新客户,并记录投诉。操作系统的用户几乎总是一次处理一条记录。他们反复执行相同的操作任务,一遍又一遍。 另一方面,数据仓库的用户则观察组织的运转情况。他们统计新订单并将其与上周的订单进行比较,询问新客户为何注册以及客户抱怨了什么。数据仓库的用户几乎从不一次只处理一行数据。相反,他们的问题通常需要搜索数百或数千行数据,并将其压缩成一个答案集。为了进一步复杂化情况,数据仓库的用户不断改变他们提出的问题类型。”
《数据仓库工具箱:维度建模完全指南》 作者:拉尔夫·金博尔和玛吉·罗斯
在线事务处理(OLTP)
● 典型的在线事务处理(OLTP)数据库应用包括航空预订、银行业务、大学管理、街角的电子商店和我的通讯录。
● 在线事务处理(OLTP)应用的特点是许多短事务,涉及更新和主要是点查询。
- 更新账户余额
- 注册课程
- 将书籍添加到购物车
● 查询触及的数据量小(一条或几条记录)。更新频繁。数据必须始终是最新的且一致的。并发是最大的性能关注点。
在线分析处理(OLAP)
● 典型的在线分析处理(OLAP)数据库应用包括用于审计、预测和商业智能的业务分析和报告。
● 在线分析处理(OLAP)应用的特点是涉及复杂查询的长事务。
- 报告每个部门每月的总销售额
- 识别畅销书籍
- 统计学生少于十人的课程
● 查询触及大量数据。更新不频繁(只在开始时)。单个查询可能需要大量资源。操作静态数据快照可能是可接受的。近似答案也可能是可接受的。
在同一个数据库系统中同时进行OLTP和OLAP往往是不切实际的。
● 例如,分析师提出一个计算所有销售总和的查询,然后该查询为了一致性而在销售表上获取锁,新的销售事务就会被阻塞。
● 一种解决方案是构建一个专用的数据仓库,
- 使组织的信息容易获取
- 呈现组织的信息一致性
- 适应并且能够抵御变化
- 保护组织的信息资产
- 作为改进决策的基础
- 并且得到业务社区的接受
比尔·因蒙
“数据仓库是一个面向主题的、集成的、非易失的、随时间变化的数据集合,用以支持管理层的决策。数据仓库包含了粒度化的企业数据。” 《构建数据仓库》,1992 作者:比尔·因蒙
● 因蒙提倡一个他称之为企业数据仓库的集中式数据仓库。企业数据仓库整合了组织内各种来源的数据,提供了企业数据的整体视图。这允许进行全面的报告和分析。
● 因蒙强调规范化的模式,最小化冗余并维持数据的完整性和一致性。
● 因蒙的方法遵循自上而下的设计方法论。它从设计整个企业数据模型开始,然后进展到创建特定主题领域的数据集市。
拉尔夫·金博尔
“数据仓库是专门为查询和分析而结构化的事务数据的副本。” “最简单的形式下,数据集市呈现来自单一业务流程的数据。这些业务流程跨越了组织功能的界限。” 《数据仓库工具箱》,1996 作者:拉尔夫·金博尔
● 金博尔的方法遵循自下而上的设计方法论。它从设计和开发单个数据集市开始,每个数据集市都旨在满足特定业务流程的独特需求。然后,这些数据集市被整合到更广泛的数据仓库环境中。
● 金博尔提倡使用维度建模,特别是星型模式来设计单个数据集市。这种方法旨在简化最终用户的查询和报告。
● 金博尔主张由数据集市组成的分散式数据仓库。
业务流程
● 我们考虑一个零售业务流程。
● 记录的交易是每个销售点上记录在收据上的销售。
● 在数据仓库中记录的交易是单个销售。
立方体
● 这个数据集市可以被看作是一个包含单个事实(收据的一行)及其度量(售出数量)的交易的立方体。
● 这个立方体有三个维度。例如,它可以是一个具有更多维度的超立方体,比如客户、促销等。
实体-关系图
● 这个立方体可以通过一个实体-关系图进行建模,其中包括一个n元关系(事实)和多个实体集(维度)。
● 立方体可以通过一个实体-关系图(ER图)进行建模,其中包括一个n元关系(事实)和三个实体集(维度)
● 这个设计被称为星型模式。
● 星型模式由一个事实表和多个维度表组成。
真值表
● 事实表记录了业务流程中的交易,以最细的可用粒度记录(例如,销售点收据的一行)。
● 事实表记录了业务流程中每一笔交易的度量(也有时称为事实)(例如,数量、总价等)以及不同维度表中描述交易的维度行的代理键(例如,产品、日期、商店等)。
产品维度
● 维度表尽可能全面地描述维度,以便于分析。维度表中的每个条目都有一个代理键,用于在事实表中引用它(一种外键)。
● 例如,产品维度表记录每个产品的名称、库存单位编号、类别、单价等。产品维度表还可能有特殊产品(例如,没有SKU的产品)和未识别产品的行(比空值更好)。
商店维度
● 例如,商店维度表记录每个商店的名称、位置和地址的详细信息、电话号码等。商店维度表也可能有未识别商店的行。
日期维度
● 例如,日期维度表记录每个日期的所有可用于分析的字段:不同格式的日期、一周中的日子、在日历年、财政年和学术年中的位置,以及分析用途,是否是给定国家的公共假日等。日期维度表还可能有特殊和未识别日期的行。
维度的不同字段可能定义层次结构。
● 例如,在日历年、财政年和学术年中的年、季度、月、周和日层次结构。
重复使用
● 维度表在星型模式中可能扮演多个角色。
● 例如,日期维度可以用来指示库存星型模式中订单的下单、交货和支付日期。
雪花模式
● 金博尔主张不进一步分解实体集。例如,我们可以向商店维度添加关于区域、地区等的信息,而不是将商店分解为与区域实体集相关联的商店实体集。
● 通常不倾向于将星型模式进一步扩展为雪花模式。
● 为了简单和效率,维度中可以重复信息。存储很少成问题(如有必要可以使用视图)。规范化不是关注点,因为数据应该已经被清理,且没有更新。
切分和分析
● 查询通常对立方体进行切片和切块,并聚合度量。
数据仓库查询
● 查询通常在事实表和需要表达条件和分组的维度表的自然连接上计算聚合函数。
立方体
● 层次结构可以通过分组和其他SQL构造进行向下钻取或向上汇总。CUBE是GROUP BY子句的一个子句,它定义了多个同时进行的分组集。CUBE生成输入列的所有可能分组集。
● 例如,CUBE (A, B, C) 子句等同于不带GROUP BY子句的查询和七个带有子句GROUP BY A、GROUP BY B、GROUP BY C、GROUP BY A, B、GROUP BY A, C、GROUP BY B, C 以及 GROUP BY A, B, C的查询的(有序)联合。
● 在上面的例子中,CUBE计算了总体平均销售额、按地区、按类别以及按类别和地区的平均销售额。
向上和向下滚动
● ROLLUP是GROUP BY子句的一个子句,它定义了多个同时进行的分组集。ROLLUP生成所有分组集,考虑输入列的顺序。
● 例如,GROUP BY ROLLUP (A, B, C) 子句等同于不带GROUP BY子句的查询和三个带有子句GROUP BY A、GROUP BY A, B 和 GROUP BY A, B, C的查询的(有序)联合。
● 在上面的例子中,ROLLUP计算了总体平均销售额、按类别以及按类别和地区的平均销售额。
查询类型
更一般地,查询可能涉及
- 复杂的布尔条件
- 分组、分区和排序
- 聚合和窗口函数
- 统计函数
- 时间序列函数
- 空间数据函数
总线架构
● 数据仓库可能包含几个共享公共维度的事实表。这被称为总线架构。
实施
● 解决方案是构建一个专用的数据仓库。
- 从各种OLTP系统复制数据,并使用提取、转换、加载(ETL)工具简化数据清理和刷新;
- 使用维度建模简化OLAP的设计;
- 优化数据组织并调整数据库管理或使用专用的OLAP系统;
- 利用数据组织使用报告、可视化和交互式探索工具创建用户友好的可视化。
● 数据仓库应用包含四个组件:数据准备阶段、仓库本身、分析以及报告、可视化和探索组件。
● 有许多软件工具和系统用于实施和操作数据仓库应用的组件。
- 提取-转换-加载
- IBM InfoSphere DataStage
- Oracle Warehouse Builder
- SQL Server Integration Services
- Pentaho Kettle
- 数据仓库管理系统
- Oracle, IBM DB2, Microsoft SQL Server, PostgreSQL
- Teradata
- SAP HANA
- 在线分析处理(构建摘要)和探索性数据分析(寻找模式)
- Microsoft Excel 和 Power BI
- Oracle Reports
- Cognos
- Tableau
- Business Intelligence and Reporting Tools (BIRT)
- 数据挖掘工具
- 机器学习算法
生命周期
最后,让我们回顾一下数据仓库应用的开发和生命周期。