如何使用informatica从源数据库表中删除重复的行。 必须在不使用任何其他表的情况下完成此操作。表示源和目标是Oracle数据库中的同一个表。
答案 0 :(得分:4)
您可以使用Rank转换来查找重复项:
Rank
选项。 Number of Ranks
设置为等于或大于单个记录所需的最大重复次数。 RANKINDEX
将等于1,因此请使用过滤器转换仅将RANKINDEX > 1
行传递给目标并使用DD_DELETE
更新策略。 答案 1 :(得分:1)
这是我的邪恶想法。然而,正如上面所假设我们有一些唯一标识每一行的surogate键。所以这里:
Lookup Transformation
Dynamic lookup cache
和Source filter
设置为类似1=2
的内容 - 我们不希望查找事实上读取任何数据。 Condition
以比较您要用来确定重复项的所有端口(例如除了surogate键之外的其他所有端口)NewLookupPort=1
值。每个后续实例(即重复)都将生成NewLookupPort=2
。Filter Transformation
放弃所有NewLookupPort=1
行Update Transformation
为所有其他行设置DD_DELETE
。如上所述,这假设表中存在一些代理键。
答案 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'重复记录和
如果您已经获得解决方案,请告诉我。