1

我正在使用 Informatica PowerCenter Designer 8.1.1

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

PORT_ID
ISSUE_ID
MKT_VAL

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

PORT_IDISSUE_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 的所有行,然后插入传入记录。

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

4

4 回答 4

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
于 2012-08-22T13:39:08.903 回答
0

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

1) Delete statement (Given by Rajesh) (delete from tgt_table where (port_id, issue_id) not in (select port_id, issue_id from src_table ); commit;)

2) 插入语句

Insert into tgt_table where not in src_table
 commit;

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

于 2012-08-29T17:18:35.303 回答
0

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

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

于 2016-07-30T01:41:42.717 回答
0

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

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

-> 转到查找属性,

-> 检查动态查找缓存框

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

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

0 没有变化

1是插入

2是更新

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

希望这可以帮助..

干杯。

于 2016-03-17T09:19:53.607 回答