假设我想在DWH系统中实现SCD type2历史维度表(或者我应该说具有SCD type2属性的表),现在我已经将其作为“常用表”实现了natural key
+ { {1}} + primary surrogate key
+ datefrom
+ dateto
其他列。
其中
iscurrent
才能在所有事实表和primary surrogate key
+ datefrom
+ dateto
列需要跟踪历史记录。现在我想在事实维度DWH设计中使用系统版本的时态表,但MSDN表示:
时态表必须定义主键才能进行关联 当前表和历史表之间的记录,以及 历史记录表不能定义主键。
所以看起来我应该使用iscurrent
生成“动态”或其他ETL过程的视图,但我不喜欢这两个想法......
也许有另一种方式?
答案 0 :(得分:1)
您可以在数据仓库的持久暂存区域中使用Temporal Table。然后,您可以简单地应用源系统中的更改,而不会丢失任何历史版本。
然后,当您查询或构建维度数据集市时,您可以将事实加入维度的当前版本或历史版本。请注意,您不需要需要代理键来执行此操作,但您可以生成它们以简化和优化查询维模型。您可以使用类似
的表达式生成代理键ExpectedConditions.elementToBeClickable(element)
然后像往常一样加载事实表时加入维度表。
但有趣的是,这可以推迟您的维度建模,并且您可以选择SCD类型,直到您真正需要它们为止。减少和推迟数据集市设计和实施可帮助您更快地实现渐进式增长。您可以使用持久性暂存区域(或者如果您更喜欢该术语的“数据湖”)的视图自信地提供一组初始报告,同时您对数据集的设计思维也在不断发展。