SQL Server scd2 和 scd1 中的 DWH SCD 类型 2 实现

Posted

技术标签:

【中文标题】SQL Server scd2 和 scd1 中的 DWH SCD 类型 2 实现【英文标题】:DWH SCD type 2 implementation in SQL Server scd2 and scd1 【发布时间】:2019-03-21 15:23:44 【问题描述】:

我们正在实施新的 dwh 解决方案。我有许多维度需要慢慢改变类型 2 属性。我正在考虑在我的维度中实现类型 2 和类型 1 属性的组合。也就是说,对于某些维度属性,我们通过在暗表中插入新行来跟踪历史记录(Type2),对于其他属性,我们将只更新现有行以进行任何更改(Type1)

问题

这是一个好习惯吗?可以将 SCD 1 和 2 组合用于相同的暗淡吗?

维度中的 SCD 2 属性的数量是否有限制?我的维度很宽,比如 300 列,其中一位用户要求 scd 类型 2 跟踪大约 150 列。在昏暗中有这么多 scd2 属性可以吗?是否会因此对多维数据集和仪表板等下游报告 BI 解决方案的性能产生任何影响?

在 OLTP 系统中,我们维护一个“审计”表来记录任何更新。尽管这不是一种非常容易查询的格式,但我们得到了与此更改相关的大多数问题的答案。我们不需要太多关于数据变化的报告。当然,有一些重要的列,例如Status,我们肯定需要 SCD2,但其余列,我不确定 DWH 中许多其他列的历史是否会增加任何价值。我的问题是当我们在 OLTP 中有这个审计表时,我如何确定 DWH 中哪些属性需要 SCD 2?

【问题讨论】:

【参考方案1】:

好的做法?是的。经常被忽视的维度建模的标准特征。我已经看到了 SCD0、SCD1 和 SCD2 组合的尺寸,没有什么可以阻止其他 SCD 类型的使用。

对列没有限制,但这似乎有点过分。您可能希望使用“散列”方法来检测 SCD2 更改,您可以在其中计算 SCD2 列的散列,并使用此值来检测是否有任何列发生了更改。

抱歉,我不明白关于审计日志的问题。这些日志是您的数据源吗?

【讨论】:

以上是关于SQL Server scd2 和 scd1 中的 DWH SCD 类型 2 实现的主要内容,如果未能解决你的问题,请参考以下文章

如何最好地处理缓慢变化维度 (SCD2) 中的历史数据变化

本地 SQL Server 实例和 Azure SQL Server 中的 LoadData 脚本

sql SQL Server中的XML索引,主要和辅助

sql SQL SERVER和MySQL中的CHOOSE和ELT函数

sql SQL Server中的charindex和patindex有什么区别?

sql server 中两个日期之间的年份以及每个日期在 sql server 中的开始和结束日期