在未在目标上定义 PK 的情况下在 Informatica 中实施 SCD 2

Implementing SCD 2 in Informatica without PK defined on the target

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

使用动态 lkp 概念实施 SCD 类型 2,它将传入行标记为 0,1,2。 我将 SRC 端口关联到查找端口,并通过指定 "Update Dynamic Cache Condition" 即 MD5(SRC Columns)<>MD5(LKP columns) 并启用 "Output Old Value On Update" 和 "Insert Else Update" 属性 SET 并覆盖 LKP sql.

然后在 EXP 中标记传入记录是否 insert/update 使用我们将在路由器中定义 grps。

来自 Router INSERT GRP(FLAG = 'INSERT' or FLAG = 'UPDATE') ,新插入的 1 个目标实例。 更新 GRP(FLAG = 'UPDATE') 连接到 EXP,我将旧记录状态标记为 'N' 并在第二个目标实例上执行更新覆盖,因为没有定义 PK 正在执行此操作。

当我在调试器模式下检查流程时,一切都工作正常,但是当有更新的记录时,旧记录被标记为状态 'N' 并且新记录被插入第一个管道(第一个目标实例)而旧记录从路由器的 UPDATE grp 流出时,它的状态更新为 N,结束日期正在使 SYSDATE-1 在表达式中工作,但它再次在第二个目标实例中插入,应该更新为状态为 N 和结束日期(sysdate-1)。但是它被插入状态 Y 和结束日期为默认日期谁能帮我弄清楚这里出了什么问题?

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

还尝试通过在第二个管道中保持更新策略来保持 DD_UPDATE 并通过在目标设计器中指定 PK(Infa 级别而不是数据库级别)将源视为会话中的数据驱动但没有运气

步骤

  1. 执行SCD时,首先要识别历史记录,你必须 先更新历史记录再插入新记录

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

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