【问题标题】:Handling Delete followed by Insert in Informatica Designer在 Informatica Designer 中处理删除后插入
【发布时间】:2012-08-17 13:44:05
【问题描述】:

我正在使用 Informatica PowerCenter Designer 8.1.1

我有一个包含三列的源表,分别是

PORT_ID
ISSUE_ID
MKT_VAL

我需要将源表中的数据同步到目标表,该目标表包含不同数据库上的相同三个表。

PORT_ID 和 ISSUE_ID

之间存在 1:n 的关系

在执行此数据同步时,我必须执行 DELETE,然后执行 INSERT,原因是映射到 PORT_ID 的 ISSUE_ID 的数量可以更改。假设最初,Source 和 Target 中的数据是这样的:

PORT_ID    ISSUE_ID
1          A
1          B
1          C

源中的数据变为:

PORT_ID    ISSUE_ID
1          A
1          B
1          D

因此,在同步期间,我必须首先删除映射到 PORT_ID = 1 的所有行,然后插入传入记录。

我无法弄清楚如何在地图设计器中完成这项工作。有人可以给我一些意见吗?

【问题讨论】:

    标签: informatica-powercenter informatica


    【解决方案1】:

    最常见的方法是使用预查询。如果 port_id 和 issue_id 在表中是唯一的,您可以使用....

    delete from tgt_table
    where (port_id, issue_id)
      not in (select port_id, issue_id
                from src_table
             );
    commit;
    

    第二种方式:

    如果可以将这两列添加为映射中的键,那么您可以“检查”将目标行视为“插入、更新、删除”(所有三个)以确保目标数据与源数据。然而,在大多数情况下,业务规则比这更复杂,因此很少使用此功能。

    另一个常见的实现是基于对目标表的查找来“标记要删除的行”。

       Source -> Lookup (target_table) -> 
       exp (flag to see if the value exists) -> 
       mark for delete ->
       Delete using update_strategy_transformation
    

    【讨论】:

    • 您能详细说明一下您提到的“第二种方式”吗?
    【解决方案2】:

    编写一个简单的存储过程,它执行以下操作:

    1) 删除语句(由 Rajesh 提供) (从 tgt_table 中删除 哪里(port_id,issue_id) 不在(选择 port_id,issue_id 来自 src_table ); 犯罪; )

    2) 插入语句

    Insert into tgt_table where not in src_table
     commit;
    

    3) 在映射中使用dummy作为源和目标,并使用STORED_PROCEDURE_TRANSFORMATION调用存储过程。

    【讨论】:

      【解决方案3】:

      您可以在源表上创建动态查找。

      您可以做些什么来创建动态查找,

      -> 转到查找属性,

      -> 检查动态查找缓存框

      -> 然后检查插入其他更新框。

      一旦您这样做,一个新端口 NewLookupRow 将出现在端口选项卡中。 您可以使用此端口检查记录是插入还是更新具有以下相应值

      0 没有变化

      1 是插入

      2 是更新

      现在您可以相应地更新目标。

      希望这会有所帮助..

      干杯。

      【讨论】:

      • 这更像是一个评论而不是答案。
      • 现在这看起来像是一个答案,经过我的编辑,尝试学习如何让事情变得更好和简单。
      • 谢谢 Prafulla,我会好好照顾的。
      【解决方案4】:

      我认为我们不需要在这里进行动态查找,因为要求是源中没有重复。

      为什么不使用更新策略而不是删除和插入进行定期查找和更新记录?

      【讨论】:

      • 这看起来像是评论,而不是问题的答案。
      猜你喜欢
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 2018-11-24
      • 2018-10-22
      相关资源
      最近更新 更多