节点手册 · 数据清洗

KNIME Duplicate Row Filter 去重用法

Manipulation → Row → Transform

按指定的列判重,重复的只留一条。关键在两件事:拿哪几列判重,以及重复的几条里保留哪一条。

它解决什么问题

同一笔业务被导出了两次、系统重复推送、多个分支合并后出现重号 – 这些都要去重。它按你指定的列判断哪些行算「同一条」,然后只留一条。

它判的是业务重复,不是行 ID 重复。行 ID 重复是 KNIME 内部的唯一性冲突,报错会直接中止执行,那是另一回事。这个节点管的是「这两行在业务上是同一笔」。

它在流程里的位置

1 月明细分支一
2 月明细分支二
Concatenate摞起来
Sorter定好行序
Duplicate Row Filter去重

前面那个排序节点不是可有可无的。如果你打算「保留第一条」,那么哪一条算第一条完全由当前行序决定。

基本信息

英文原名Duplicate Row Filter
中文名称重复行处理(iModel 中文界面)
输入端口1 个数据表
输出端口1 个。可以选择不删行、只加标记列,这样重复的行仍然在表里但被标出来了
是否改变行数取决于处理方式:只留一条会变少,加标记列则不变

配置项逐条

  • 判重列Choose columns

    拿哪几列判断两行是否相同。这一项决定一切。选「资产编号」,编号相同就算重复;选全部列,则要每一列都一样才算重复。两种结果差得很远。

    实务上多数场景该选业务主键那一两列,不该选全部。全选的话,只要有一列多了个空格就判不出重复。

  • 重复行如何处理Duplicate rows handling

    只保留一条,还是全部保留但加两列标记(哪些是重复的、它跟谁重复)。做数据核对时优先选加标记列 – 先看清楚重复了多少、都是些什么,再决定删不删。直接删是不可逆的。

  • 保留哪一条Row selection

    三种:第一条、最后一条、或者按某一列取最大或最小的那条。按列取是最稳的做法 – 比如同一个资产编号有多条记录时保留「更新时间」最大的那条,结果不依赖行序。

    选「第一条」或「最后一条」就必须先排序,否则每次跑出来留下的可能不是同一条。

Duplicate Row Filter 配置对话框
判重列Choose columns
资产编号 选业务主键,别全选。全选时一个空格就会让重复判不出来。
重复行如何处理
只保留一条保留全部并加标记列 核对阶段先加标记看清楚,确认无误再改成只留一条。
保留哪一条Row selection
第一条最后一条按「更新时间」取最大 按列取最不依赖行序,重跑结果稳定。

三个常见坑

  1. 明明有重复却判不出来。判重列里有看不见的差异:前后空格、全角半角、大小写。去重之前先用 String Manipulation 把判重列统一一遍 – 这一步几乎是必需的。
  2. 每次跑留下的记录不一样。选了「保留第一条」但上游没有确定的排序。修法是前面加 Sorter,或者改成按某一列取最大最小。
  3. 把不该合并的合并了。判重列选得太少。比如只按「资产编号」判重,但同一编号在不同年度各有一条记录,这两条其实都该留。判重列要选到能唯一标识一条业务记录的粒度。

什么时候该换别的节点

情况换成
不只去重,还要对重复的几条做汇总GroupBy,按业务键分组再聚合
要处理的是行 ID 重复报错RowID 节点重排,或调 Concatenate 的重复处理方式
只想看看有没有重复,不动数据GroupBy 按业务键计数,看有没有大于 1 的
要按另一张表剔除记录Reference Row Filter

去重之后行数不对

先确认判重列选得对不对,再确认这些列有没有空格和大小写差异。

iModel 专属客服
网页直接对话,无需微信
4008568196 拨打此号码联系我们

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码