在Informatica中实施SCD 2,而不在目标上定义PK。

问题描述 投票:0回答:1

enter image description here当目标表(oracle)上没有定义PK时,我们如何在informatica中实现SCD 2?

我已经将SRC端口与查找端口关联起来,并通过指定 "更新动态缓存条件 "即MD5(SRC列)<>MD5(LKP列)和启用 "Insert Else Update "属性SET的 "Output Old Value On Update "并覆盖LKP sql。

然后在EXP中标记传入的记录是否要插入tupdate使用,在Router中我们将定义grps。

从Router INSERT GRP(FLAG = 'INSERT' or FLAG = 'UPDATE'),1个目标实例为新的insert.UPDATE GRP(FLAG = 'UPDATE')连接到EXP,在EXP中我将旧的记录状态标记为'N',并在第二个目标实例中进行更新覆盖,因为没有定义PK,所以正在这样做。

每件事都在正常工作,而我在调试器模式下检查流,但当有一个更新的记录旧记录被标记状态'N'和新的记录被插入在第一管道(第一目标实例),而旧的记录,当它流从UPDATE grp的路由器,它得到更新的状态为N和结束日期,我做SYSDATE-1它的工作在表达式,但它再次得到INSERTED在第二目标实例,应该得到更新的状态为N和结束日期(sysdate-1)。 但是它的插入状态为Y,结束日期为defaukt日期,任何一个人可以帮助我找出这里发生了什么问题?

注:在会话级别,对于TARGET实例1,它的INSERT和第二个实例的更新应该发生 "UPDATE as UPDATE"。

也试过在第二个管道中保持DD_UPDATE的更新策略,并通过在目标设计器(Infa级别而非db级别)指定PK,在会话中把源视为DATA DRIVEN,但没有任何运气。

sql oracle informatica informatica-powercenter scd
1个回答
1
投票

步骤

  1. 在进行SCD时,首先要对历史记录进行身份识别,要先更新历史记录,然后再插入新的记录。

  2. 你必须使用 目标负荷计划 并设置,首先你的更新流应该应用,然后插入操作应该发生。你将在映射选项卡中有目标负载计划。

enter image description here

  1. 在会话任务中,在 "属性 "选项卡中,将 "处理源行 "改为 "数据驱动"。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.