合并来自不同粒度维度的数据

Posted

技术标签:

【中文标题】合并来自不同粒度维度的数据【英文标题】:Merging data from dimensions of different grains 【发布时间】:2015-05-19 22:20:31 【问题描述】:

我正在使用 RDBMS 并编写与 ETL 程序等效的程序,但没有使用 Informatica 等工具。

源数据来自三个不同的表,每个表都有不同的数据存储级别,所有数据都按帐户进行,但 SCD-type-2 行为使行数可变。此外,其中一个来源具有“每天”的数据,即每天一行。

需要将这些数据(最后是5个属性)合并到一个表中,以方便查询帐号和日期。有效地为给定帐户提供“今天该属性的值是多少”的查找服务。

挑战主要在于平衡记录的“颗粒”。有几个蛮力的想法。一种是分解可变颗粒行,并生成额外的行以与最低的颗粒属性保持一致。每个属性每天有效地有一行。这对我来说看起来并不干净,并且也会消耗更多的存储空间。这是一个例子 -

来源 -

table 1 (Customer Details)
Address - dt1 - dt2 - val1
Address - dt2+1 - dt3 - val2
Address - dt3+1 - infinity - val3

table 2 (Loan Details)
Maturity Date - dt4 - dt5 - val8
Maturity Date - dt5+1 - dt6 - val-x
Maturity Date - dt6+1 - dt7 - val-xx
Maturity Date - dt7+1 - infinity - val-y

table 3 (Account Balance) (one record per day)
Daily Interest Accrued - dt1 - val1
Daily Interest Accrued - dt2 - val2
Daily Interest Accrued - dt3 - val3

目标

dt1 - Address-val - Maturity Date-val - Daily Interest Accrued-val
dt2 - Address-val - Maturity Date-val - Daily Interest Accrued-val
dt3 - Address-val - Maturity Date-val - Daily Interest Accrued-val

这三个属性需要存储在一个表中...请想法..

【问题讨论】:

告诉我们这些表是什么,例如 ACCOUNT 和 ACCOUNT-BALANCE,而不是编造名称。它将帮助我们更好地理解问题,并且您会得到更好的答案。 @RonDunn - 添加了真实的表名/引用。希望它能让事情变得更清楚......谢谢你的建议。 【参考方案1】:

让我们先处理建模。

在没有更多详细信息的情况下,我认为您已经获得了 ACCOUNT-BALANCE 的定期快照、DATE 维度、CUSTOMER 的 Type-2 缓慢变化维度和 LOAN 的 Type-1 维度。

FACT_ACCOUNT 的属性类似于 DIM_DATE_ID、DIM_CUSTOMER_ID、DIM_LOAN_ID、ACCRUED_INTEREST、ACCOUNT_BALANCE。

我认为您没有 LOAN 的 Type-2 维度的原因是因为我看不到它的值(例如帐号、到期日期和原始余额)随时间而变化。

通过将 ACCOUNT_BALANCE 从维度移动到事实表,您可以更好地表示流程。

可能会出现的一个问题是利率的存储。固定利率将是 SCD1 维度的一个属性。周期性变化的速率可以是 SCD2 值。如果它以与事实表相同的粒度(即每天)发生变化,我会将其设为非附加度量。

我确实看到了您关于在一张表中存储三个属性的观点,但我不明白它的用途。如果满足查询所需的属性在不同的表中,这就是 JOIN 的作用。任何称职的可视化或分析工具都将支持这样的简单连接。

【讨论】:

以上是关于合并来自不同粒度维度的数据的主要内容,如果未能解决你的问题,请参考以下文章

DataWarehouse - 具有不同粒度/维度度量的事实表

事实和维度数据仓库 Datamart

pandas使用resample进行不同粒度下的时间特征重构实战:构建时间维度统计特征

如何对链接到具有不同粒度级别的多个事实的维度表进行建模?

在多维数据集设计中接近操作期间的混合粒度日期维度

维度建模的基本原则