sql—在informatica中实现SCD2,而不在目标上定义pk

pvabu6sv  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(483)


在目标表(oracle)上没有定义pk的情况下,如何在informatica中实现SCD2?
使用动态lkp概念实现scd类型2,该概念将传入行标记为0,1,2。我将src端口与lookup端口相关联,并通过指定“update dynamic cache condition”ie md5(src columns)<>md5(lkp columns),启用“output old value on update”和“insert else update”属性集并重写lkp sql来给定条件。
然后在exp-am中标记传入记录是否插入/更新,我们将在路由器中使用该记录定义grp。
从router insert grp(flag='insert'或flag='update'),1个新insert的目标示例。update grp(flag='update')连接到exp,其中我将旧记录状态标记为'n',并在第二个目标示例上执行更新覆盖,因为没有定义pk,我正在执行此操作。
当我在调试器模式下检查流时,一切正常,但是当有更新的记录时,旧记录被标记为状态“n”,新记录被插入到第一个管道(第一个目标示例)中,而旧记录从路由器的update grp流出来时,它被更新为状态“n”,结束日期使sysdate-1在表达式中工作,但它再次被插入到第二个目标示例应该用状态n和结束日期(sysdate-1)进行更新,但是它被插入状态y和结束日期defaukt-date,有人能帮我找出哪里出了问题吗?
注意:在会话级别,对于目标示例1,它的insert,对于应该进行更新的第二个示例,它的“updateas update”
还尝试在第二个管道中保持更新策略,保持dd\u更新,并通过在目标设计器(infa级别而不是db级别)指定pk将源视为会话中的数据驱动,但没有成功

vmjh9lq9

vmjh9lq91#

步骤
在执行scd时,您首先必须标识历史记录,并且必须首先更新历史记录,然后插入新记录
必须使用目标加载计划和设置,首先应用更新流,然后执行插入操作。您将在Map选项卡中有目标负载计划

在会话任务中,在“属性”选项卡中,更改“将源行视为数据驱动”

相关问题