来自多个源表的星型架构

问题描述

我正在努力弄清楚如何从多个源表创建星型模式。我在一家贸易公司工作,因此数据与用户交易活动有关。我遇到的问题是我们的数据集没有每个可能是维度的字段的主 ID。相反,我们通常使用日期和帐号的组合将我们的数据关联在一起。这是 3 个源表的示例...

enter image description here

我想把它变成星型模式,看起来像......

enter image description here

是我将源表非规范化为一个宽表的唯一选择(加入交易以根据帐号和日期进行定位,并根据帐号加入用户表),为每个维度创建键,然后将其重新规范化为星号架构?星型架构是否曾经由多个源表构建?

解决方法

星型模式几乎总是从多个源表创建。

正常流程是:

  1. 填充维度表
  2. 使用您的源数据创建临时/虚拟事实记录
  3. 使用这个事实记录,查找相关的维度键
  4. 将实际事实记录写入目标事实表
,

数据仓库是关于查询速度的。数据仓库不应该关心数据完整性。它不应该清理或纠正错误的数据。它只需要将所有数据收集到一个单一的记录中,以呈现给模型进行分析。对数据进行反规范化就是这样做的。

在星型模式中,维度彼此不了解,并且与其他维度没有关系。在雪花中,维度与其他维度相关。这是星星和雪花的主要区别。

事件的所有元数据选项都汇总到维度中并用于切片/过滤。事件的所有可测量/计算数据都在事件事实中,以及对包含相关元数据的维度的引用。元数据/维度在多个事实记录中重复使用。

根据您提供的有限示例,我建议您研究退化维度和垃圾维度。您的交易和头寸数据可能需要转化为事实和维度(退化),而您的一些标志属性可能最好放入垃圾维度。

您还应该确保尺寸键清晰。您不应该有多个指向一个维度的路径(帐号:交易 -> 位置 -> 用户和交易 -> 用户),因为这会导致在根据您遍历的关系进行查询时出现不一致的结果。