天天看点

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

目录

​​1、什么是维度表?​​

​​2、维度表设计原则​​

​​(1)维度属性尽量丰富,为数据使用打下基础​​

​​(2)给出详实的、富有意义的文字描述​​

​​(3)区分数值型属性和事实​​

​​(4)沉淀出通用的维度属性,为建立一致性维度做好铺垫​​

​​(5)退化维度(DegenerateDimension)​​

​​(6)缓慢变化维(Slowly Changing Dimensions)​​

​​3、维度表设计方法​​

1、什么是维度表?

维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实” , 将环境描述为“维度”。

维度表包含了事实表中指定属性的相关详细信息,最常用的维度表有日期维度、城市维度等。

例,小编的日期维表:

num 字段名 字段中文名 描述 数据类型
1 date 日期 日期 yyyMMdd格式 bigint
2 week 星期,数字型 星期,数字型 0-6 bigint
3 week_cn 星期中文名 星期中文名 星期一…… string
4 year_weeks 一年中的第几周 一年中的第几周 1 2 3…… bigint
5 mon_dt 本周周一日期 本周周一日期 bigint
6 sun_dt 本周周日日期 本周周日日期 bigint
7 month 年月 年月,yyyyMM格式 bigint
8 month_short 月份简写 月份简写,MM格式1~12 bigint
9 month_cn 月份中文名 月份中文名 一月…… string
10 quarter 季度 季度,yyyyQ1\2\3\4 string
11 quarter_short 季度 数字型 季度 数字型 1-4 bigint
12 quarter_cn 季度中文名 季度中文名 第一季度…… string
13 year 年份 年份,yyyy格式 bigint

2、维度表设计原则

维度的作用一般是查询约束、分类汇总以及排序等,我们在进行维度表设计时,应当提前考虑:

(1)维度属性尽量丰富,为数据使用打下基础

比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析、探查提供了良好的基础。

(2)给出详实的、富有意义的文字描述

属性不应该是编码,而应该是真正的文字。在间里巴巴维度建模中, 一般是编码和文字同时存在,比如商品维度中的商品 ID 和商品标题、 类目 ID 和 类目名称等。 ID 一 般用于不同表之间的关联,而名称一般用 于报表标签

(3)区分数值型属性和事实

数值型宇段是作为事实还是维度属性,可以参考字段的一般用途。 如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常 用于参与度量的计算, 则是作为事实。比如商品价格,可以用于查询约 束条件或统计价格区间 的商品数量,此时是作为维度属性使用的;也可 以用于统计某类目 下商品的平均价格,此时是作为事实使用的。另外, 如果数值型字段是离散值,则作为维度属性存在的可能性较大;如果数 值型宇段是连续值 ,则作为度量存在的可能性较大,但并不绝对,需要 同时参考宇段的具体用途。

(4)沉淀出通用的维度属性,为建立一致性维度做好铺垫

有些维度属性获取需要进行比较复杂的逻辑处理,有些需要通过多表关联得到,或者通过单表 的不同宇段混合处理得到,或者通过对单表 的某个字段进行解析得到。此时,需要将尽可能多的通用的维度属性进 行沉淀。一方 面,可以提高下游使用的方便性,减少复杂度;另一方面,可以避免下游使用解析时由于各自逻辑不同而导致口径不 一致。

(5)退化维度(DegenerateDimension)

在维度类型中,有一种重要的维度称作为退化维度。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

(6)缓慢变化维(Slowly Changing Dimensions)

维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD),缓慢变化维一般使用代理健作为维度表的主健。

缓慢变化维的三种处理方式:

① TYPE1 直接覆盖原值

适用于:不看历史数据,简单粗暴

​​

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

​​

② TYPE2 拉链表

需要在维度行再增加三列:有效日期、截止日期、行标识(可选)。

在旧的一行数据增加关链时间(end_date),新的一行数据增加开链时间和关链时间,多条数据加起来是一个完整的时间周期。

​​

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

​​

③ TYPE3 增加属性列

​​

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

​​

3、维度表设计方法

  • 第一步:选择维度或新建维度。作为维度建模的核心,在企业级数 据仓库中必须保证维度的唯一性。以淘宝商品维度为例,有且只允许有 一个维度定义。
  • 第二步:确定主维表。此处的主维表一般是 ODS 表,直接与业务 系统同步。以淘宝商品维度为例, s_auction_auctions 是与前台商品中心 系统同步的商品表,此表即是主维表。
  • 第三步:确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同 一业务系统中的表之间存在 关联性。根据对业务的梳 理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。
  • 第四步 :确定维度属性。本步骤主要 包括两个阶段,其中第 一 个阶 段是从主维表 中选择维度属性或生成新的维度属性;第 二个阶段是从相 关维表中选择维度属性或生成新 的维度属性。以淘宝商品维度为例,从 主维表 (s_auction_auctions)和类目、 SPU、卖家、店铺等相关维表中 选择维度属性或生成新 的维度属性。

参考文献:阿里巴巴大数据之路