快速变化的维度
Posted
技术标签:
【中文标题】快速变化的维度【英文标题】:Rapidly Changing Dimension 【发布时间】:2019-08-23 18:51:59 【问题描述】:最近,我遇到了Rapidly Changing Dimensions
的概念(迷你尺寸)。
我了解快速变化的属性从主维度表中删除并放入junk dimension
的部分(这些属性中值的所有可能组合。这个垃圾维度将连接到父维度表通过一个中间“bridge-table
”(迷你维度),它将包含父维度键和垃圾维度surrogate key
(以及开始和结束日期)。
但是,我无法理解它是如何在现实生活中实现的。
那么,假设如果 RCD 属性改变,那么迷你维度(或父维度)中的记录是否会使用来自 junk dim 的新 SK 进行更新?如果是,那么我们如何在这种情况下跟踪历史,因为我们正在破坏性地更新存在于迷你维度值中的相同记录?
另外,如果在包含新 junk dim 记录的 sk 的迷你维度(如 SCD-2)中创建了一个“新”记录,那么我们又会遇到同样的问题,即迷你维度的大小随着时间。另外,事实是只保留父 dim 的 ik 还是同时保留父 dim 和 junk dim sks 的 ik?
谁能举例说明一下?
假设 DW 模型中有 4 个表: 1. PAT_DIM 是父维度 2. PAT_JNK_DIM 是包含 RCD 属性的垃圾维度 3. PAT_MINI_DIM 是 1 和 2 之间的 mini-dim 桥接表(上图)。
PAT_DIM:
--------
pat_dim_sk,
pat_id,
pat_dob,
blood_type
PAT_MINI_DIM:
------------
pat_id,
pat_rcd_sk,
start_date,
end_date
PAT_JNK_DIM:
----------
pat_rcd_sk,
pat_weight,
pat_bmi
鉴于上述示例,任何人都可以帮助我了解如何在现实世界场景中建模快速变化维度 (RCD)。数据仓库中的 RCD 表是如何相互连接的。
【问题讨论】:
就个人而言,如果合适的话,我认为将属性放入事实中没有问题。不要仅仅因为您认为属性应该在一个维度中而不是在一个事实中,就被抓住构建一个实际上与一个维度是一对一的事实。不用考虑太多 - 为什么维度不能像其他维度一样直接连接到事实? 【参考方案1】:一般来说垃圾维度 - 由维度模型中的低基数标志和指标组成。
在您的情况下,您不需要桥接表。小维度应包含 RCD,并应直接连接到 FACT 表。
【讨论】:
那么当RCD的值改变时,新的RCD行代理键将在事实表行中更新?还是会在事实表中使用新的代理键创建新记录? SCD 类型 4 可能最适合 RCD。但如果您需要实现为 SCD 类型 2 - 那么有两种选择可以在 Fact 和此 RCD 之间实现连接。【参考方案2】:根据要求,SCD 类型 1 或类型 4 可能最适合 RCD。
但是,如果您需要将其实现为 SCD 类型 2 - 那么有两种选择可以加入 Fact 和此 RCD,并且它还取决于数据模型设计。
选项 1:如果在设计中您在 FACT 表中有 DIM SK,那么您需要根据 DIM 行的自然键将 DIM 连接到表以获取当前标志为真的最新 RCD。 (请注意,当 RCD 发生变化时,FACT 表不会更新)。
选项 2:在您的设计中,您可以为 DIM 创建一个新密钥(持久超自然密钥/稳定密钥),并且该密钥将被带到所有未来版本的昏暗行。在 FACT 表中,您保留 DIM 的 SK 和 DIM 的 Durable 密钥。所以加入的时候可以避免Dim的自加入,使用Durable Key并且Current Flag为真,获取最新的DIM行。如果您需要以前版本的 DIM 行,您可以通过 DIM SK 加入。
【讨论】:
以上是关于快速变化的维度的主要内容,如果未能解决你的问题,请参考以下文章