在我工作的地方,在极少数需要的情况下,我们初始化(“截断并加载”)Fact \ Dimension表。
这种“ INIT”要求引用初始化对象的所有对象随后都要进行初始化,以便保留RI(参考完整性)。
示例–我们在属性丰富(约25个)的SCD Dim_Employees中发现了一个错误,该错误会更改每条记录的生效日期。这要求所有引用对象重新计算其外键。
您是否有同样的情况?如果是,您将如何处理?
答案 0 :(得分:0)
当我们从SCD2 / SCD1更改为SCD6时,我们多次重新定义了数据,或者发现其中一个数据流出了问题,就像您提到的那样。
重新映射数据并不难,您只需要在INIT步骤中截断数据以进行克隆(或在时间旅行窗口内进行克隆)之前进行操作,然后将事实表加入到旧的维度即可旧维度键,然后通过旧维度外键和时间加入到您的新维度中,现在您知道了新键映射的旧键。现在,它成为更新的来源,并且如果您执行了此操作,而所有其他ETL操作都已暂停,那么您就可以保持数据完整性。
如果您不能暂停实时ETL流程,则将进行多步更新,在该更新中,您将拥有新的除法表和旧的除法表,并对其进行常规映射,并修复读取以合并结果,然后执行一次您的新事实正确映射到新维度,使用ND键翻转并回填所有旧事实,然后没有ND间隙,则可以停止OD / ND合并,然后停止OD映射并放下OD列...