数据仓库——雪花模式以及层次递归

层次结构

钻取

向下钻取 :对某些代表事实的报表中添加维度细节
向上钻取:从某些代表事实的报表中去除维度细节

属性层次

提供了一种自然方法,用于顺序地在不断深入的层次上组织事实。许多维度可以被理解为包含连续主从关系的属性层次。此类层级的最底层代表维度中描述最低级别的详细信息,最高层代表最高级别的概要信息。每一个级别都可能有一个属性的集合,该集合与下一级别存在主从关系。
在属性层次中钻取:一些软件工具将钻取的概念与属性层次的概念关联起来。这些工具将层次作为预先定义的钻取路径。查询事实时,通过在层级的下一个级别中添加一个维度属性来完成向下钻取,上钻即通过去除当前层次结构级别的属性而开展的。

维度的多重层次结构

通常在维度中确定多重层次结构,每一个层次结构包含维度的所有属性,但将属性组织起来的方式不同。用户看到并认为是相同信息,在这些层次中是完全不同的表现方式。这些层次结构都是有效的,每一种方法都是分解维度中信息的有效方法。

维度交叉

某些情况下,期望的钻取路径可能会从一个维度表到达其他维度表。

回避层次结构

可以完全不用借助层次结构来添加维度细节信息的两个特性使之成为可能,首先,属性的基数或者给定的实例值的数量,不要确定它属于那个层次结构,其次在多个双亲中能找到一些实例值。

实例层次结构

层次的结构的另外一种形式可能存在于维度的实例中,实例层次结构也可以用来分析事实,将通过下钻多级拥有者的方法来探索数据

文档化属性层次结构

  1. 配置基于属性的钻取特征
  2. 信息收集
    文档化属性层次结构的好处
  • 确认维度一致性
  • 多维数据集设计与管理
  • 聚集设计与管理

雪花结构

通常,星型连接只包含一张事实表,但是在数据库设计中要创建一种雪花结构的复合结构需要多张事实表结合。

雪花结构中,不同的事实表通过共享一个或多个公共维表连接起来。或者将事实表和维表结合起来形成一个类似雪花的结构。
维度规范化的方法

  • 对一些维度表进行部分规范化,对其他维度不做修改
  • 对一些维度表进行完全规范化,对其他维度不做修改
  • 对每个维度表部分规范化
  • 对全部维度表完全规范化
    优势与劣势
    优势
  • 减少相对原维度表很少的空间
  • 规范化的结构更利于更新和维护
    劣势
  • 模式比较复杂,用户不容易解释
  • 浏览内容困难
  • 额外的连接将使查询性能下降

什么时候使用雪花模式

雪花化的背后原则是,将维度表中基数小的属性移出,构建新的表

  • 大维度表,可节约空间
  • 用户浏览子维度的几率相对于其他维度来说更大
  • 如果结构和工具在雪花模式中可以工作得更好,这将是使用雪花模式的理由

雪花结构与建模问题

  • 多值属性,维度表和事实表之间存在的标准的一对多关系被破坏了,维度属性包含多个值。
  • 迭代的实例层次结构,一些层次结构不能定义为属性之间的关系
  • 重复组,当一组属性在维度表中不止出现一次

支架表

重复的属性被放置到一个单独的支架表中,该表有自己的代理键,在原始的维度中,迁移属性被替换为引用支架表的一个或多个外键。

支架表可以用于合理化ETL并减少行长度,但是代理了复杂性为题,并且可能会对查询的性能造成影响,如果要使用支架表,那么应该评估它对数据库优化程序性能的影响。

支架表中的类型二变化会导致连锁反应,要求对所有相关的维度表中的所有关联行执行类型二变化

多值维度

  • 多值维度,当事实表的行涉及维度表中多行时,将产生多值维度。

处理多值维度的方案

简化关系

事实表与维度表之间的多值关系可以通过将多值关系分解为多个一对多关系来解决,然而该方法使报表更加复杂并且仅仅支持数量有限的关系。

为多值维度构建桥接表

无须直接引用维度表,每个事实表将引用一组表,该组表被称为桥接表。因为它将事实表和维度表连接起来。

  • 这组表包含引用需要的维度表的组键和外键列
  • 每个组成员将增加一行,每一行都具有相同的组键
  • 事实表和桥接表可以使用组键来做连接操作。然后将维度表与桥接表做连接操作
  • 与简化多对对关系相比,桥接表的使用提供了更好的灵活性,并简化了生成报表的难度
  • 桥接表可能造成双重计算问题。即描述事实可能出现被多次计算的情况。
避免双重计算的方案
  • 对维度中分组具有唯一列进行分组
  • 增加分配因子,分配因子指明了每个组中成员对相关事实贡献的百分比
  • 使用主成员补充桥接表,对没有经验的用户隐藏桥接表的存在
桥接表的其他影响
  • 缓慢变化,如果被桥接的维度行包含类型1变化,它将与所有存在的组关联,如果桥接的维度行包含类型2变化,当成员合作再发生变化时需要建立一个新组。无论何时,在组是可辨认实体的情况下,采用将组定义为维度表的方式,成员作为多值属性,都会获得更好的建模效果。
  • 分解多对多关系,维度表桥接事实具有多对多关系,如果使用的软件产品不允许使用多对多关系,可以通过建立交叉表的方式将其分解。

多值属性

多值属性,当一个维度行需要获取当以属性的多个值时,将产生多值属性。

简化多值属性

针对多值属性,考虑将其简化为固定数量的单值属性,如果重复的属性不被用于过滤或分组查询结果,这种方法就是最简单的选择

简化多值属性存在的问题
  • 受限于不同值的数量
  • 按照指定行业进行过滤的查询需要定义多个条件
  • 按照行业进行分类时,将会出现问题,因为可能出现在任何一列中

使用属性桥接表

桥接表放置在维度表与支架表之间

  • 维度表中不存储多值属性,他们将按照各自的代理键,存储在不同表中,该表被称为支架表
  • 桥接表包含两列,一列表示组键,另一列设计支架表
  • 当维度行涉及支架表中的特定组合时,将在桥接表中为这些值建立组
  • 维度表和支架表之间可以通过组键连接。桥接表与支架表也通过组连接
使用属性桥接表发生变化的影响
  • 支架表发生变化,需要所有相关维度行都需要做出相应处理
  • 组成员发生变化的影响,针对组的任何表化都需要在维度表中增加一行以反应组的变化
  • 维度表发生变化的影响,维度表需要对数据源变化做出相应,新的版本需要新的代理键。如果多值属性没有发生变化,新行仍能够重用相同的组键
  • 将支架表包含到桥接表汇总,如果仅仅包含一个到连个多值属性,可以不使用支架表,将属性放置到桥接表中以简化配置
  • 如果软件产品不允许使用多对多关系,可以建立一个交叉表将其分解。
  • 作为事实表的桥接,由于桥接表主要包含外键,它与事实表非常相似。尽管桥接表并不包含事实,但是可以用作同样的意图。
相关推荐
csding112 小时前
写入hive metastore报问题Permission denied: user=hadoop,inode=“/user/hive”
数据仓库·hive·hadoop
不会写代码的女程序猿21 小时前
关于ETL的两种架构(ETL架构和ELT架构)
数据仓库·架构·etl
ssxueyi1 天前
数据仓库有哪些?
大数据·数据仓库·数据湖
武子康1 天前
大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
大数据·数据仓库·hive·hadoop
向阳逐梦1 天前
开源云原生数据仓库ByConity ELT 的测试体验
数据仓库·云原生·开源
ssxueyi1 天前
数据仓库是什么?数据仓库简介
数据仓库
小刘鸭!2 天前
Hive解决数据倾斜
数据仓库·hive·hadoop
武子康2 天前
大数据-255 离线数仓 - Atlas 数据仓库元数据管理 数据血缘关系 元数据
大数据·数据仓库·hive·hadoop·spring
故苏呦2 天前
全域数据集成平台ETL
数据仓库·etl
武子康4 天前
大数据-253 离线数仓 - Airflow 任务调度 核心概念与实际案例测试 Py脚本编写
java·大数据·数据仓库·hive·hadoop·springboot