处理删除,然后在Informatica Designer中插入

时间:2012-08-22 07:10:39

标签: informatica-powercenter informatica

我正在研究Informatica PowerCenter Designer 8.1.1

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

PORT_ID
ISSUE_ID
MKT_VAL

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

PORT_ID ISSUE_ID

之间存在1:n的关系

在执行此数据同步时,我必须执行DELETE,然后执行INSERT,原因是,映射到PORT_ID的ISSUE_ID的数量可以更改。让我们说,从源头和目标来看,数据就像这样:

PORT_ID    ISSUE_ID
1          A
1          B
1          C

源中的数据更改为:

PORT_ID    ISSUE_ID
1          A
1          B
1          D

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

1)删除声明(Rajesh给出)     (从tgt_table删除       where(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调用存储的proc。

答案 2 :(得分:0)

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

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

  

- >转到查找属性,

     

- >检查动态查找缓存框

     

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

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

  

0没有变化

     

1是插入

     

2是更新

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

希望这会有所帮助..

干杯。

答案 3 :(得分:0)

我认为我们不需要动态查找,因为要求源中没有重复..

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