节点手册 · 表合并

KNIME Joiner 两表关联用法

Manipulation → Column → Split & Combine

按关联键把两张表横向拼起来,相当于 Excel 的 VLOOKUP 或 SQL 的 JOIN。最阴险的一点是:关联不上时它不报错,只是悄悄少给你几行。

它解决什么问题

左表有资产明细,右表有部门主数据,两边都有部门编码 – 用 Joiner 按部门编码配对,把部门名称、负责人这些字段接到明细上。

横向拼用它,纵向摞用 Concatenate。这两个经常被搞混:Joiner 让表变宽,Concatenate 让表变长。

节点库位置在不同版本间有出入。直接在节点库搜索框敲 Joiner 最快,不必翻目录树。

基本信息

英文原名Joiner
中文名称连接器 / 表连接(iModel 中文界面)
输入端口2 个。上面那个是左表,下面那个是右表 – 顺序影响保留哪边的未匹配行
输出端口默认 1 个。可以在配置里拆成三个:匹配上的、左表没配上的、右表没配上的
是否改变行数会。一对多时行数会成倍增长

配置项逐条

  • Join columns关联列

    左右各选一列配成一对,可以配多对(比如同时按年份和部门编码)。两边列名不必相同,但类型必须一致 – 这是最常见的失败原因,下面单独讲。

  • Include in output输出包含哪些行

    三个勾选项:匹配上的行、左表未匹配的行、右表未匹配的行。这三个的组合就是 SQL 里的各种 join:只勾第一个是内连接,第一加第二是左连接,三个全勾是全外连接。默认只勾了匹配行,所以配不上的会被无声丢弃。

  • Output输出方式

    合成一张表,还是拆成三个端口分别输出。做数据核对时拆开更有用 – 能直接看到哪些明细在主数据里查无此人。

  • Duplicate column names重名列处理

    两张表有同名列时,给右表的加后缀还是直接报错。默认加后缀,会出现 部门名称(右) 这种列名,下游节点如果写死了列名就会断。关联前先用 Column Filter 把右表不需要的列去掉,比事后改名干净。

最小示例

给资产明细补上部门负责人。

左表:资产明细

资产编号部门编码原值
FA-001D0186000
FA-002D024200
FA-003D09128000

右表:部门主数据

部门编码部门名称负责人
D01信息部
D02行政部

只勾「匹配行」的输出

资产编号部门编码原值部门名称负责人
FA-001D0186000信息部
FA-002D024200行政部

FA-003 消失了 – 主数据里没有 D09。这一行价值 12.8 万,就这么无声无息地从结果里没了,节点还是绿灯。

三个常见坑

  1. 关联列类型不一致,一行都配不上。左表的部门编码是文本,右表读进来是数字,KNIME 认为它们不是同一个东西,全部匹配失败,输出空表且不报错。判断办法:看两边列名旁的类型图标。修法:用 Number to String 或 String to Number 把两边统一。
  2. 看着一样但配不上,是空格或大小写。「D01」和「D01 」不同,「d01」和「D01」也不同。关联前两边都过一遍 String Manipulation,去首尾空格并统一大小写。
  3. 一对多导致行数暴涨。右表里同一个部门编码出现了三次,左表的每一行就会变成三行。判断办法:比对关联前后的行数。修法:先确认右表在关联列上是否唯一,不唯一就先用 Duplicate Row FilterGroupBy 收敛成一行。
养成一个习惯:关联完先对行数。内连接后行数变少,说明有配不上的;行数变多,说明右表有重复。两种都可能是数据问题,也可能是你要的效果 – 但必须是你知情的。

什么时候该换别的节点

情况换成
两张表结构相同,只想上下摞起来Concatenate
只想用另一张表筛掉一批行,不需要带字段过来Reference Row Filter
只想按对照表替换某一列的值Cell Replacer,比 Joiner 轻
要按范围匹配,比如金额落在哪个区间Binner 或 Rule Engine,Joiner 只做等值匹配

关联结果是空表

九成是两边关联列类型不一致。先看类型图标,再看有没有多余空格。这两条排掉还不对,把两张表的输出截图发过来。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码