【问题标题】:Implementing SCD 2 in Informatica without PK defined on the target在没有在目标上定义 PK 的情况下在 Informatica 中实施 SCD 2
【发布时间】:2020-09-19 14:22:02
【问题描述】:

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

使用动态 lkp 概念实现 SCD 类型 2,它将传入行标记为 0、1、2。 我已将 SRC 端口与查找端口相关联,并通过指定“更新动态缓存条件”即 MD5(SRC 列)MD5(LKP 列)并使用“插入其他更新”启用“更新时输出旧值”来进行调节" 设置属性并覆盖 LKP sql。

然后在 EXP 中标记传入记录是否插入/更新,在路由器中使用哪个我们将定义 grps。

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

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

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

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

【问题讨论】:

  • 贴出映射结构

标签: sql oracle informatica informatica-powercenter scd


【解决方案1】:

步骤

  1. 在执行 SCD 时,您首先必须识别历史记录,并且您必须 先更新历史记录,再插入新记录

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

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

【讨论】:

  • 您能否分享一下您正在突出显示的映射结构(请注意,目标表上没有定义 PK),这将很有帮助
  • 您的映射屏幕截图显示目标表中有主键
  • 您必须在会话级别使用数据驱动选项。如第二个屏幕截图中所述。您还可以显示您在更新策略中使用的表达式
  • 我已经在目标设计器级别而不是数据库级别定义了 PK,这样我就可以使用更新策略来更新旧记录,方法是将 DATA DRIVEV 选项保持在会话级别,然后插入而不是更新,在更新策略中它的 DD_UPDATE
  • 是否使用了目标加载计划选项?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
相关资源
最近更新 更多