概念词条

KNIME 里的行 ID 是什么

Row ID

每张表最左边那一列灰色的编号。它不是你的数据,是 KNIME 给每一行发的身份证 – 而且要求全表不重号。

一句话定义

行 ID 是 KNIME 自动给每一行分配的唯一标识,默认长成 Row0Row1 这样。它独立于你的数据列,作用相当于数据库里的主键。

它和你的业务编号是两码事。资产编号、工号、订单号都是普通数据列,允许重复。只有最左边那一列受唯一性约束。这两个概念搞混,排查方向会整个跑偏。

为什么要有它

KNIME 的每个节点都能点开看中间结果,你还能把不同分支的结果对照着看。要做到这一点,系统必须能稳定地指认「这一行是哪一行」 – 靠列的组合是不够的,因为列可能被过滤掉、被改名、被聚合。行 ID 就是那个不随列变化的锚点。

它也是拼表时唯一性校验的依据。这解释了为什么 Concatenate 会因为行 ID 撞车而直接中止执行。

哪些操作会改变它

操作行 ID 会怎样
读取节点默认读入从 Row0 开始重新编号
读取时指定某列作行 ID用那一列的值当行 ID – 那列如果有重复就会报错
Row Filter 筛掉一些行不变。留下的行保持原编号,所以看起来是跳号的,这是正常的
Sorter 排序不变。行 ID 跟着行走,排完看起来乱序
Concatenate 纵向拼表各输入表的行 ID 会撞车,要按配置加后缀或提前重排
GroupBy 分组汇总重新生成 – 输出是每组一行,原来的行 ID 没有意义了
RowID 节点专门用来重新生成或指定行 ID

两个实用结论

  1. 不要拿业务编号当行 ID。需要按它关联就用 Joiner,需要按它去重就用 Duplicate Row Filter,两件事都不必动行 ID。一旦拿业务编号当行 ID,那一列出现重复就直接中止执行。
  2. 凡是要纵向拼接的分支,拼之前各接一个 RowID 节点重排。行 ID 本来就不承载业务含义,重排不丢任何信息,却能从根上避开撞车。这个习惯比出错再回来查便宜得多。

相关内容

页面相关点
Duplicate row ID 行 ID 重复撞车报错的三种场景与修法
Concatenate 行合并拼表时行 ID 处理方式的取舍
Sorter 排序器为什么排完序行 ID 看起来是乱的
Row Filter 行筛选器筛完之后行 ID 跳号是正常的

还是分不清行 ID 和业务编号

看表的最左边一列 – 灰底、列头是空的、你没建过它,那就是行 ID。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码