这是我的问题,在Google上我可以找到很多帖子,我们可以使用动态缓存实现SCD2 ...
当我们有一个动态缓存时......假设有一条新记录,它会被插入....如果有一个更改的记录,那么现有的记录会被更新。
因此,请考虑更改记录的情况......现有记录将会更改。
现在对于SCD2 ...我们更新现有的和新的插入为当前。
使用Newlookup端口,我们可以识别是否有更改或是否有新的更改....并且可以根据SCD2明确更新插入目标。
但在这种情况下,您的目标表和动态缓存将不同步。由于您的缓存只会更新,但您的目标将根据SCD2历史记录维护进行更新以及新记录插入。
因此,如果您的缓存与目标...不同步,那么我们怎么能说使用动态查找可以实现SCD2。
请分享您的观点。
答案 0 :(得分:1)
基本上,您希望仅保留当前行版本与查找缓存同步。处理完新行后,它将转到Lookup缓存和目标表:
Lookup cache | DB Table
Key Active Description | Key Active Description
-------------------------------------------------------------------
AA1 1 The Moon AA1 1 The Moon
现在,如果我们获得一个具有相同密钥的行,但描述已更新:
Lookup cache | DB Table
Key Active Description | Key Active Description
-------------------------------------------------------------------
AA1 1 The Sun AA1 1 The Sun
AA1 0 The Moon
将更新查找缓存,我们将新行插入目标表并将现有行标记为非活动状态。现在,如果比较活动行,查找缓存将与DB同步。
答案 1 :(得分:0)
查找仅保留目标表中的活动记录。这就是我们使用查询覆盖的原因。 我们的座右铭应该是在查找和目标表中保持这些活动记录同步。在SCD2中,更新的记录被插入目标表中,新的开始日期作为活动记录,旧记录将结束日期。因此,我们需要将旧记录替换为查找缓存中的新记录,以使活动记录保持同步。