《维度建模权威指南第三版》- 读书笔记(一) 简介


本文为《维度建模权威指南-kimball》前两章的读书笔记,如有错误,请指正。

1. 维度建模是什么?

对一个产品,我们通常会存储用户行为日志等海量数据,这些数据通常被用来:

  • 开发数据看板,作为产品核心指标与主要业务场景的数据监控与分析
  • 数据分析/挖掘,从数据中洞察信息,为产品的优化和迭代提供有说服力的指导

在这个过程中,我们的数据仓库需要满足以下两个需求:

  • 数仓中数据的组织形式是分析/开发人员易于理解与使用的
  • 能提供高效的查询性能

通过维度建模的思想建设数仓,就可以满足上述需求。

《维度建模权威指南第三版》- 读书笔记(一) 简介

维度建模,我理解为数仓建设中数据存储或组织方式的一种方法论,更具体地,维度模型表示每个业务过程包括事实表和若干个维度表,事实表存储该业务过程的度量信息,维度表与事实表相关联,存储业务相关维度的额外信息。

举个例子,在下图的零售事实中,会有一个事实表,记录本次零售的销量和销售额,而这个事实表可以关联多个维度表,得到这些维度的额外信息,如产品维度表中的商品名称、价格,客户维度表中的年龄、性别等。
《维度建模权威指南第三版》- 读书笔记(一) 简介

在关系型数据库中实现的维度模型称为星型模式,而在多维数据库中实现的维度模型通常称为MOLAP(多维OLAP),两者的逻辑设计相同,只是在物理实现上不同。

对这段话,个人理解为:

在关系型数据库中查询维度信息,需要关联维度表,效率较低;

在多维数据库中,这里应该指Kylin这类多维分析数据库,通过预计算等方式实现高性能查询,如Kylin中先构建cube,预计算不同维度组合下的汇总数据并存储在hbase中,供后续查询时直接访问,实现交互式的快速查询(参考kylin文档Kylin-Cube 创建);

而像Hive这类数据仓库工具,由于主要用于离线分析,其维度模型更像是有冗余的星型模式。一般会将数据存储为包含主要维度信息的大宽表,以空间换时间,减少后续查询的关联次数;但维度信息无法预先全部确定,对于不在宽表中的维度信息,也会以维度表的形式存储,形成星型模式。

《维度建模权威指南第三版》- 读书笔记(一) 简介

2. 维度建模技术概述

本节主要介绍定义中提到的事实表和维度表,最后介绍维度建模基本的设计过程。

2.1 事实表

“事实”指业务过程中涉及的“度量”,一般以数值展示,事实表中的一行对应业务过程中指定粒度下的一次度量事件

事实表中的数字度量可划分为三类——

  • 可加事实:在所有维度上都可直接求和,如订单价格
  • 半可加事实:在部分维度上可直接求和,如商品库存可以在商品维度上求和,表示所有商品的总库存,但在日期维度上求和则没有意义
  • 不可加事实:在所有维度上都不可直接求和,一般会存储不可加事实的可加事实分量,在应用层计算时再求和计算出不可加事实,如如平均每单价格,可以存储为订单数和订单总价,在需要时求和求比值即可得到平均每单价格

常见的事实表有三类——

  • 事务事实表:每一行对应空间或时间上某点的度量事件,每产生一次度量事件就会在事务事实表中插入一行。如用户的行为日志就是一种事务事实表
  • 周期快照事实表:每行汇总了某一周期的多个度量事件的结果,如每一天的销售额、订单数目等,即使当天没有产生订单也会插入一条度量指标为0的记录(因此在时间维度上是稠密的)
  • 累积快照事实表:每行汇总了一个业务过程多个步骤的度量事件,当步骤更新时,则在对应记录上更新,如购买这一过程中包含下单、支付、收货等,下单时产生一条记录,支付时更新这条记录的支付相关字段

2.2 维度表

维度表一般包含一个主键列与多个属性列,如商品id为主键,商品名称、类别等为属性列,通常将事实表的外键与维度表的主键进行关联,用于事实表的上卷、下钻分析。

维度表在使用时要注意几点——

  • 维度表的属性列尽量不包含空值,因为不同数据库对于空值的处理可能不同,可采用特殊字符串代替,如“Not Applicable”
  • 不同维度表中具有相同的属性时,需要保证其含义相同,称为一致性维度,此时可将不同事实表的数据在一致性维度上汇总
  • 维度可包含对其他维度的引用,称为支架维度,这种方式可以使用但尽量少用,维度之间的关联一般通过事实表实现

2.1 维度设计过程

维度模型设计期间主要包含四个步骤:

1、选择业务过程

业务过程是指事实表中要记录的操作型活动,如购买了一个商品、下载了某个应用等动作,业务过程会有一些“度量”,这种度量转化为事实表中的事实。

2、声明粒度

在维度设计中,粒度是指业务过程中度量的“粗细”程度,用于确定事实表中的一行表示什么,同一事实表中不应该混用多种粒度。

3、确认维度

维度提供某一业务过程涉及的背景信息,如“谁、什么、何时、何处、为什么、如何”等,维度表包含BI中用于过滤及分类事实的描述性属性。一般情况下,限定了维度信息,也就限定了粒度。

4、确认事实

“事实”指业务过程中涉及的“度量”,一般以数值展示,事实表中的一行对应业务过程中指定粒度下的一次度量事件

举个例子,在销售这一业务过程中——

a、若事实表的粒度为订单粒度,则一个订单的商品数、价格是一个事实,作为事实表中的一行;

b、若事实表的粒度为商品粒度,则该商品的销量、销售额是一个事实,可作为事实表的一行(此时,维度信息与a不相同,如少了订单id这一维度);

c、上述两种情况度量相同而粒度不同,两个事实不应该存储在同一个事实表中。

Reference

  1. 《维度建模权威指南第三版》