5.1 维度设计基础

5.1.1 维度的基本设计方法

  1. 选着维度或者新建维度,保证维度唯一性
  2. 确定主维表,一般是ODS表,直接与业务系统同步
  3. 确定相关维表
  4. 确定维度属性,从主维表选择维度属性或生成维度属性,从相关维表中选择维度属性或生成维度属性

    5.1.2 维度的层次结构

    按照层次结构向下钻取式数据钻取的方法之一。

    5.1.3 维表反规范化

    雪花模型节约存储是没必要的,反规范化提升易用性和性能。

    5.1.4 一致性维度和交叉探查

    不一致:维度或维度属性(格式和内容)不一致
    一致的表现形式:
  • 共享维表
  • 一致性上卷
  • 交叉属性

    5.2 维度设计高级主题

    5.2.1 维度整合

    数据由面向应用的操作型环境进入数据仓库后,需要进行数据集成。

  • 命名规范的统一

  • 字段类型的统一
  • 公共代码及代码值的统一
  • 业务含义相同的表的统一:主从表,直接合并,不合并

整合方式

  • 垂直整合:不同来源包含相同的数据集,存储的信息不同
  • 水平整合:不同来源包含不同的数据集,不同子集之间无交叉,也可能存在部分交叉

    5.2.2 水平拆分

    维度按照类别或类型进行细分。两种解决方案:
  1. 将维度的不同分类实例化为不同的维度,同时在主维度中保存公共属性(差异大,关联性低)
  2. 维护单一维度,包含所有可能的属性(差异小,关联性大)

    5.2.3 垂直拆分

    出于扩展性、产出时间、易用性等方面的考虑,设计主从维度。主维表存放稳定、产出时间早,热度高的属性;从维表存放变化较快、产出时间晚、热度低的属性。

    5.2.4 历史归档

  • 归档策略1:同前台归档策略,在数据仓库中实现前台归档算法。策略复杂,经常变化。
  • 归档策略2:同前台归档策略,采用数据库变更日志的方式,解析binlog获取每日增量,增量merge全量获取最新全量,使用delete标志作为归档标志。
  • 归档策略3:数据仓库自定义归档策略,简单直接的算法,比前台晚归档,少归档。

    5.3 维度变化

    5.3.1 缓慢变化维

  • 第一种处理方式:重写维度值。采用此种方式,不保留历史数据,始终取最新数据。

  • 第二种处理方式:插入新的维度行。采用此种方式,保留历史数据,纬度值变化前的事实和过去的维度值相关联,维度值变化后的事实和当前的维度值相关联。
  • 第三种处理方式:添加维度列。采用第二种处理方式不能将变化前后记录的事实归一为变化前的维度或者归一为变化后的维度。

    5.3.2 快照维表

    按照Kimball的维度建模理论应该使用代理键作为维表主键,但在阿里巴巴数据仓库建设的实践过程中因为分布式平台难以生成全平台唯一的代理键和增加ETL的复杂性,使用快照方式处理缓慢变化维。每天保存快照,限定日期使用自然键进行关联。
    优点:

  • 简单有效,开发和维护成本低

  • 使用方便,理解性好

缺点

  • 存储的极大浪费(生命周期制度,存储成本低于CPU、内存的成本)

    5.3.3 极限存储

    历史拉链表,即处理缓慢变化维的第三种方法。使用难度高,使用start_dt和end_dt分区,随着时间推移,分区数量会极度膨胀。
  1. 透明化,解决使用难度,view或着hook
  2. 分月做拉链

极限存储存储成本低,但是产出效率低,大部分需要t-2产出,且不能对变化频率高的数据达到节约成本的效果。

5.3.4 微型维度

将缓慢变化的维度从维表中移出,放到全新的维表中。一般是能枚举出所有可能的属性,ETL逻辑复杂,破坏了维度的可浏览性。

5.4 特殊维度

5.4.1 递归层次

数据仓库系统和商业智能工具中不支持递归SQL,所以需要处理。维度的递归层次按照层级是否固定分为均衡层次结构和非均衡层次结构。对此处理方法:

  • 层次结构扁平化:降低递归层次使用复杂度最简单和有效的方法是层次结构的扁平化,通过建立维度的固定数量级别的属性来实现。
  • 层次桥接表:针对层次结构扁平化所存在的问题,采用桥接表的方式来解决。

    5.4.2 行为维度

    类似如卖家地址、类目等维度,都和事实相关,如交易物流等称为行为维度。对于行为维度,有两种处理方式,其中一种是将其冗余至现有的维度表中,如将卖家信用等级冗余至卖家维表中。另一种是加工成单独的行为维表,如卖家主营类目。

    5.4.3 多值维度

    对于多值维度,一种情况是事实表的一条记录在某维表中有多记录与之相对应。常见处理方式有三种。
    第一种是降低事实表的粒度。第二种是处理方式是采用多字段。第三种处理方式是采用较为通用的桥接表。

    5.4.4 多值属性

    维表中的某个属性字段包含多个值时,称为多值属性。常见处理方式三种:
    第一种保持维度主键不变,将多值属性放在维度的一个属性字段中。第二种也是保持维度的主键不变,但将多值属性放在维度的多个属性字段中。第三种是维度的主键会发生变化,一个维度值存放多条记录。