它解决什么问题
左表有资产明细,右表有部门主数据,两边都有部门编码 – 用 Joiner 按部门编码配对,把部门名称、负责人这些字段接到明细上。
横向拼用它,纵向摞用 Concatenate。这两个经常被搞混:Joiner 让表变宽,Concatenate 让表变长。
节点库位置在不同版本间有出入。直接在节点库搜索框敲 Joiner 最快,不必翻目录树。
基本信息
| 英文原名 | Joiner |
|---|---|
| 中文名称 | 连接器 / 表连接(iModel 中文界面) |
| 输入端口 | 2 个。上面那个是左表,下面那个是右表 – 顺序影响保留哪边的未匹配行 |
| 输出端口 | 默认 1 个。可以在配置里拆成三个:匹配上的、左表没配上的、右表没配上的 |
| 是否改变行数 | 会。一对多时行数会成倍增长 |
配置项逐条
-
Join columns关联列
左右各选一列配成一对,可以配多对(比如同时按年份和部门编码)。两边列名不必相同,但类型必须一致 – 这是最常见的失败原因,下面单独讲。
-
Include in output输出包含哪些行
三个勾选项:匹配上的行、左表未匹配的行、右表未匹配的行。这三个的组合就是 SQL 里的各种 join:只勾第一个是内连接,第一加第二是左连接,三个全勾是全外连接。默认只勾了匹配行,所以配不上的会被无声丢弃。
-
Output输出方式
合成一张表,还是拆成三个端口分别输出。做数据核对时拆开更有用 – 能直接看到哪些明细在主数据里查无此人。
-
Duplicate column names重名列处理
两张表有同名列时,给右表的加后缀还是直接报错。默认加后缀,会出现
部门名称(右)这种列名,下游节点如果写死了列名就会断。关联前先用 Column Filter 把右表不需要的列去掉,比事后改名干净。
最小示例
给资产明细补上部门负责人。
左表:资产明细
| 资产编号 | 部门编码 | 原值 |
|---|---|---|
| FA-001 | D01 | 86000 |
| FA-002 | D02 | 4200 |
| FA-003 | D09 | 128000 |
右表:部门主数据
| 部门编码 | 部门名称 | 负责人 |
|---|---|---|
| D01 | 信息部 | 张 |
| D02 | 行政部 | 李 |
只勾「匹配行」的输出
| 资产编号 | 部门编码 | 原值 | 部门名称 | 负责人 |
|---|---|---|---|---|
| FA-001 | D01 | 86000 | 信息部 | 张 |
| FA-002 | D02 | 4200 | 行政部 | 李 |
FA-003 消失了 – 主数据里没有 D09。这一行价值 12.8 万,就这么无声无息地从结果里没了,节点还是绿灯。
三个常见坑
- 关联列类型不一致,一行都配不上。左表的部门编码是文本,右表读进来是数字,KNIME 认为它们不是同一个东西,全部匹配失败,输出空表且不报错。判断办法:看两边列名旁的类型图标。修法:用 Number to String 或 String to Number 把两边统一。
- 看着一样但配不上,是空格或大小写。「D01」和「D01 」不同,「d01」和「D01」也不同。关联前两边都过一遍 String Manipulation,去首尾空格并统一大小写。
- 一对多导致行数暴涨。右表里同一个部门编码出现了三次,左表的每一行就会变成三行。判断办法:比对关联前后的行数。修法:先确认右表在关联列上是否唯一,不唯一就先用 Duplicate Row Filter 或 GroupBy 收敛成一行。
养成一个习惯:关联完先对行数。内连接后行数变少,说明有配不上的;行数变多,说明右表有重复。两种都可能是数据问题,也可能是你要的效果 – 但必须是你知情的。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 两张表结构相同,只想上下摞起来 | Concatenate |
| 只想用另一张表筛掉一批行,不需要带字段过来 | Reference Row Filter |
| 只想按对照表替换某一列的值 | Cell Replacer,比 Joiner 轻 |
| 要按范围匹配,比如金额落在哪个区间 | Binner 或 Rule Engine,Joiner 只做等值匹配 |

