目录
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、卖家、店铺等相关维表中 选择维度属性或生成新 的维度属性。
参考文献:阿里巴巴大数据之路
数仓系列爽文:https://blog.csdn.net/weixin_39032019/category_8871528.html