问题描述
我正在努力弄清楚如何从多个源表创建星型模式。我在一家贸易公司工作,因此数据与用户交易活动有关。我遇到的问题是我们的数据集没有每个可能是维度的字段的主 ID。相反,我们通常使用日期和帐号的组合将我们的数据关联在一起。这是 3 个源表的示例...
我想把它变成星型模式,看起来像......
是我将源表非规范化为一个宽表的唯一选择(加入交易以根据帐号和日期进行定位,并根据帐号加入用户表),为每个维度创建键,然后将其重新规范化为星号架构?星型架构是否曾经由多个源表构建?
解决方法
星型模式几乎总是从多个源表创建。
正常流程是:
- 填充维度表
- 使用您的源数据创建临时/虚拟事实记录
- 使用这个事实记录,查找相关的维度键
- 将实际事实记录写入目标事实表
数据仓库是关于查询速度的。数据仓库不应该关心数据完整性。它不应该清理或纠正错误的数据。它只需要将所有数据收集到一个单一的记录中,以呈现给模型进行分析。对数据进行反规范化就是这样做的。
在星型模式中,维度彼此不了解,并且与其他维度没有关系。在雪花中,维度与其他维度相关。这是星星和雪花的主要区别。
事件的所有元数据选项都汇总到维度中并用于切片/过滤。事件的所有可测量/计算数据都在事件事实中,以及对包含相关元数据的维度的引用。元数据/维度在多个事实记录中重复使用。
根据您提供的有限示例,我建议您研究退化维度和垃圾维度。您的交易和头寸数据可能需要转化为事实和维度(退化),而您的一些标志属性可能最好放入垃圾维度。
您还应该确保尺寸键清晰。您不应该有多个指向一个维度的路径(帐号:交易 -> 位置 -> 用户和交易 -> 用户),因为这会导致在根据您遍历的关系进行查询时出现不一致的结果。