节点手册 · 表合并

KNIME Concatenate 纵向拼表用法

Manipulation → Row → Transform

把结构相同的多张表上下摞成一张。十二个月的报表拼成全年,多个分公司的明细拼成汇总 – 都是它。

它解决什么问题

输入两张或多张表,输出一张行数是它们之和的表。让表变长,不是变宽。

Joiner 的分工:Joiner 按键配对、让表变宽,Concatenate 直接摞、让表变长。要判断用哪个,问一句「我是要加字段还是加记录」。

读同一个文件夹里的一批文件不必用它。CSV ReaderExcel Reader 都支持文件夹模式,读进来就已经是拼好的了,还自带来源文件列。Concatenate 用在来源本来就分散在不同分支的场合。

它在流程里的位置

1 月明细分支一
2 月明细分支二
Concatenate上下摞成一张
GroupBy全年汇总

两个输入端口可以拖动节点下缘增加。更稳妥的做法是在每个分支进入之前各接一个 RowID 节点,从根上避开行 ID 撞车。

基本信息

英文原名Concatenate
中文名称行合并 / 表追加(iModel 中文界面)
输入端口默认 2 个,可以拖动节点下缘增加更多输入
输出端口1 个
是否改变行数会。等于各输入表行数之和

配置项逐条

  • Duplicate row ID handling重复行 ID 处理

    三选一:给后来的行加后缀、跳过重复的行、或者直接中止执行。这是整个节点最要紧的一项。各输入表的行 ID 通常都从 Row0 开始,摞起来必然全部撞车。

    选「加后缀」能跑通且不丢数据。千万别选「跳过重复行」 – 它会静悄悄删掉后面表里的行,两张各 500 行的表拼完只剩 500 行,还不报错。做稽核对账的场景尤其致命。更干净的做法是拼之前每个分支各接一个 RowID 节点重排。

  • Column handling列的处理方式

    两张表列不完全一样时怎么办。取并集:所有列都保留,某张表没有的列填缺失值。取交集:只保留两张表都有的列,其余丢弃。

    取交集会无声丢列,取并集会带来一堆空值。两个都不是绝对安全的默认,配置时看清楚选的是哪个。更好的做法是在拼之前就把各分支的列统一好。

Concatenate 配置对话框
重复行 ID 处理Duplicate row ID handling
加后缀跳过重复行中止执行 选「跳过重复行」会静悄悄删数据且不报错,做稽核对账时尤其不能选。
列的处理方式Column handling
取并集取交集 取交集会丢掉只在一张表里有的列,取并集会带来一批空值。两个都不是绝对安全的默认,配置时看清楚选的是哪个。

三个常见坑

  1. 报 Duplicate row ID 直接执行失败。这是最常见的一条,原因和修法上面已经写了。展开讲的在报错排查那一组里有单独一篇。
  2. 拼完行数对不上。比预期少,多半是重复行 ID 选了「跳过」;列数比预期少,是列处理选了取交集。拼完养成对一次行数的习惯。
  3. 同名列类型不一致。两张表都有「金额」列,一张是数值一张是文本,拼起来后这一列会被降级成文本,下游求和就废了。拼之前统一类型。

什么时候该换别的节点

情况换成
要按键把字段接过来,不是加记录Joiner
一批文件在同一个文件夹里读取节点的文件夹模式,不用 Concatenate
循环里每轮结果要收集起来Loop End,它自己会做拼接
拼完要去掉重复记录后面接 Duplicate Row Filter,按业务字段去重

拼完数据变少了

查两项:重复行 ID 处理是不是选了「跳过」,列处理是不是选了取交集。这两项各自都会无声丢东西。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码