所以,我们目前正在尝试实现以下目标:
SourceTableA是一个更改数据捕获表,它将包含一个自然键,I,U,D,I然后U,我然后D,我然后U然后D,或U然后D.这个表的主键是自然键+动作(I,U或D)。
TargetTableA是一个type-2 scd表,其代理键由序列生成器生成。
我们遇到的主要问题是处理尚未插入的记录的更新(代理键仅存在于映射中而不存在于表中),但是在同一个管道中。
我们必须批量处理来自SourceTableA的所有记录。
由于复杂的查找逻辑,我们不能使用3种不同的源限定符作为I,U,D管道。
我们无法使用动态缓存维护生成的代理键的存储,因为我们无法控制Oracle如何处理ins / upd / deletes。它实际上正在工作,直到我们发现它在插入引用记录之前尝试更新。
我在这里结束了。
应该发生什么情况:
插入记录,为此记录生成密钥,例如100.插入active_flag ='Y',end_date为'open'。 接下来,更新记录进入相同的自然键,生成密钥101,并且使用active_flag ='Y'插入具有新数据的记录。以前'插入'第100行被停用为active_flag ='N'和end_date =(update_row).end_date - 1秒。
谢谢!
答案 0 :(得分:0)
当源读取相同自然键的两个记录时,目标上的动态查找将解决此问题,因为动态查找将更新缓存然后更新目标
答案 1 :(得分:0)
在“更新策略”中,将“属性”设置为“插入”和“更新”的DD_Update。 在会话级别,映射属性仅检查更新其他插入。
希望它有效!!