您现在的位置是:首页 >技术杂谈 >基于OneData的数据仓库建设维度设计网站首页技术杂谈
基于OneData的数据仓库建设维度设计
维度建模中,将度量称为事实,维度用于分析事实所需要的多样环境。维度的作用一般是查询、分类汇总以及排序。
通过报表的约束条件,以及之前数据调研和业务方的沟通,我们可以获得维度。
维度通过主键与事实表进行关联,维度表的主键分为代理键和自然键两种;代理键不具有业务含义,一般用于处理缓慢变化维度,自然键则具有业务含义。
1. 维度设计基本方法
- 选择或者新建一个维度,通过之前总线矩阵的构建掌握了目前数仓架构中的维度。
- 确定主维表。此处主维表一般是ODS表,直接与业务系统同步。
- 确定相关维表。数仓是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。跟据对业务的梳理,我们可以确认哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。
- 确定维度属性。本步骤分为两阶段,第一阶段是从主维表中选择维度属性或生成新的维度属性;第二阶段是从相关维表中选择维度属性或生成新的维度属性。
2. 规范化和反规范化
当具有多层次的维度属性,按照第三范式进行规范化后形成一系列维度表,而非单一维度表,这种建模称为雪花模式。
将维度的属性层次合并到单个维度中的操作称为反规范化。
3. 一致性维度和交叉探查
我们存在很多需求是对于不同数据域的业务过程或同一数据域的不同业务过程合并在一起观察。例如:对于日志数据域统计商品维度的近一天PV和UV;对于交易数据域统计商品维度近一天的GMV。
这种将不同数据域的商品事实合并在一起进行数据探查,称为交叉探查。
数仓能进行交叉探查的前提是,不同数据域要具有一致性维度。
4. 维度整合
由于数仓的数据源来源于不同的应用系统,应用系统之间相互独立,因此对同一信息的描述、存储都可能具有差异。
而这些具有差异的数据进入数仓后需要整合在一起:
- 命名规范的统一。表名、字段名等统一。
- 字段类型的统一。相同和相似字段的字段类型统一。
- 公共代码以及代码值的统一。
- 业务含义相同的表的统一。主要依据高内聚、低耦合的理念,将业务关系大,源系统影响差异小的表进行整合。
表级别的整合主要有两种形式:
垂直整合,即不同来源表包含相同的数据集,只是存储的信息不同,可以整合到同一个维度模型中。
水平整合,即不同来源表包含不同的数据集,这些子集之间无交叉或存在部分交叉,如果有交叉则去重;如果无交叉,考虑不同子集的自然键是否冲突,不冲突则可以将各子集自然键作为整合后的自然键,或者将各自然键加工成一个超自然键。
5. 拉链表
拉链表,又称为极限存储技术。假设某一张表是用来存储全量用户信息的,一般我们的处理方式是,用每个分区去存储每天全量数据的快照,这种方式的问题是,如果我希望保存用户的所有历史状态,我可能需要永久保存每一个历史分区。
如果使用拉链表,每个分区可以保存每个用户在当天的历史状态,同时历史分区也可以进行清理。
这样,虽然单个分区中存储的数据变多了,但是某些历史分区的数据被清理后,整个表存储的数据会变少了,因为很多没有变化的用户信息快照被清理了。
6. 微型维度
微型维度的创建是通过将一部分不稳定的属性从相对稳定的主维度中移除,放置到拥有自己代理键的新表来实现。
7. 递归层次
递归层次指的是某维表的实例值的层次关系,维度的递归层次分为有固定数量级别的均衡层次结构和无固定数量级别的非均衡层次结构。
由于数仓中一般不支持递归SQL的功能来处理这种层次结构,所以需要用到其他方式。
- 层次结构扁平化,适合均衡层次结构维度。
- 层次桥接表,适合非均衡层次结构维度。
8. 多值维度
多值维度指事实表的一条记录在某维度表中有多条记录与之对应。
针对多值维度,常见的处理方式有三种:
- 降低事实表的粒度。
- 列扩展。
- 较为通用的方式,采用桥接表。
9. 杂项维度
杂项维度是由操作型系统中的指示符或者标志字段组合而成,一般不在一致性维度之列。
这些维度如果作为事实存在事实表中,则会导致事实表占用空间变大;如果单独建立维表,则会出现许多零碎的小维表。
这时,通常的解决方案是建立杂项维度,将这些字段建立到一个维表中,在事实表中只需保存一个外键即可,杂项维度可以理解为将许多小维表通过行转列的方式存储到一张大维表中的处理方案。
10. 退化维度
指维度属性直接存储到事实表中的维度。