使用informatica删除重复的行

时间:2014-09-23 15:43:48

标签: duplicates informatica informatica-powercenter

如何使用informatica从源数据库表中删除重复的行。 必须在不使用任何其他表的情况下完成此操作。表示源和目标是Oracle数据库中的同一个表。

4 个答案:

答案 0 :(得分:4)

您可以使用Rank转换来查找重复项:

  1. 按主键分组所有列。
  2. 检查主键的Rank选项。
  3. Number of Ranks设置为等于或大于单个记录所需的最大重复次数。
  4. 对于唯一行和每个第一个重复行,
  5. RANKINDEX将等于1,因此请使用过滤器转换仅将RANKINDEX > 1行传递给目标并使用DD_DELETE更新策略。

答案 1 :(得分:1)

这是我的邪恶想法。然而,正如上面所假设我们有一些唯一标识每一行的surogate键。所以这里:

  1. 添加Lookup Transformation Dynamic lookup cacheSource filter设置为类似1=2的内容 - 我们不希望查找事实上读取任何数据。
  2. 设置Condition以比较您要用来确定重复项的所有端口(例如除了surogate键之外的其他所有端口)
  3. 将为每个新行实例分配NewLookupPort=1值。每个后续实例(即重复)都将生成NewLookupPort=2
  4. 使用Filter Transformation放弃所有NewLookupPort=1
  5. 使用Update Transformation为所有其他行设置DD_DELETE
  6. 如上所述,这假设表中存在一些代理键。

答案 2 :(得分:0)

在这里,我正在编写两种我能想到的方法

如果允许您在源限定符中编写查询 表1.A在源限定符中写入查询并选择重复行的数据(即.SELECT(*) FROM table1 GROUP BY HAVING COUNT(*)> 1) 1.B.使用选定的列使用Update Strategy DD_DELETE

删除该行

如果您需要在Informatica中提供所有数据 2.A.由于它的表带有Sorted Data或使用分类器对键上的数据进行排序 2.B.使用表达式使用变量作为IIF查找重复项(KEY_PREV = KEY_CURR,Duplicate) 2.C.使用过滤器转发重复记录 2.D.使用更新策略DD_DELETE删除记录

答案 3 :(得分:0)

我能想到两个解决方案,我不确定这些是否有效..

在源限定符中,编写查询以获取' RowID'重复记录和

  1. 将RowID传递给目标并使用Target Update Override或OR
  2. 删除记录
  3. 尝试使用' SQL转换删除'传递RowID。
  4. 如果您已经获得解决方案,请告诉我。