合并来自不同粒度维度的数据
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 - 具有不同粒度/维度度量的事实表