【发布时间】:2015-02-26 09:58:02
【问题描述】:
我们目前在数据仓库中有一个名为“卡片”的表。这被设计为类型 2 的缓慢变化维度;如果卡片状态发生变化,我们会在其中创建一个新记录,以便我们可以跟踪卡片的状态变化。
即使状态没有改变,我们也会每天记录每张卡 - 这样做是为了跟踪每日余额。示例:
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
如果我需要在今天,2015 年 2 月(例如 2014-01-01)执行过去日期范围(例如 2014 年 1 月 2 日)的 ETL,那么存储数据的最佳方式是什么,假设没有办法检索卡的过去状态?
选项 A - 插入包含过去一天当前数据的记录
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 DELETED 2014-01-01 0.00 [new entry here? - however now the card seems to have been 're-activated' on the 2nd, which is not the case]
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
选项 B - 不要修改已在维度中创建的记录
cardId state balanceAsAt balance ....
1 ACTIVE 2014-01-01 100.00
1 ACTIVE 2014-01-02 99.00
1 DELETED 2014-01-03 0.00
还有其他选择/标准做法吗?
【问题讨论】:
-
我不明白这个问题 -
execute past ETL today, Feb 2015是什么意思?为什么要为 2014-01-01 插入额外的行? -
抱歉,我的意思是说我应该在过去的日期范围(例如 2014-01-01)执行 ETL 的选项是什么 - 由于更新了卡状态,我们是否应该包含新记录?
标签: sql etl data-warehouse business-intelligence dimensional-modeling