概念词条

KNIME 里的列类型是什么

Column Type

每一列是数字、文本还是日期。这是整个知识库里被引用最多的一个概念 – 排序乱、关联配不上、求和报错,源头往往都在这里。

一句话定义

列类型决定 KNIME 怎么理解这一列的值。同样是 86000,当成数字它可以求和比大小,当成文本它就只是五个字符。类型不对,后面所有操作都会以你没预期的方式工作。

怎么看:列名旁边的小图标。点开任意节点的输出表,每个列名左边都有一个类型图标。这是排查问题时第一个该看的地方 – 比重新配置节点快得多。

类型是从哪来的

读取节点靠扫描前若干行来猜每列是什么类型,扫描行数有上限。这个机制带来两个后果:

  1. 脏值藏在扫描范围之外,执行时才炸。前 1000 行全是干净数字,这列被定成数值列;第 3000 行冒出一个「N/A」,跑起来才报错。这解释了为什么同一条流程小文件没事、大文件出错。
  2. 换一批数据可能换一种行为。推断结果随数据变化,上个月能跑通的流程这个月可能就不行。所以数据结构固定的场景,建议在读取节点里手工指定列类型,别依赖推断。

类型错了的四个症状

症状说明
排序结果乱七八糟数字被当文本,按字符逐位比,9 会排在 86000 前面
运算符里没有「大于」筛选条件的可选运算符随列类型变。只给你文本类的运算符,就是这列是文本
求和失败或结果异常聚合方法对文本列不适用,或者给出拼接结果
关联一行都配不上,还不报错左表的编码是文本、右表是数字,KNIME 认为不是同一个东西,全部匹配失败,输出空表

最后一条最阴险 – 前三个至少还看得出不对劲,它是安静地给你一张空表。

国内数据的特例:看起来像数字,其实必须是文本

身份证号、银行账号、部门编码、邮政编码,一律指定为文本。

被当成数字会出两种事故。一是前导零消失,007 变成 7。二是超过 15 位的数字会被转成科学计数法,末几位直接失真,而且不可逆 – 你在下游做什么都救不回来。

判断标准很简单:这一列你会不会拿去做加减乘除?不会的话,它就该是文本,不管它看起来多像数字。

怎么改类型

做法什么时候用
在读取节点里手工指定首选。从源头定死,不受推断结果波动影响
String to Number / Number to String中途需要转换,或者关联前统一两边的类型
String to Date&;Time文本日期转成真正的日期类型,否则日期排序永远不对
先清洗再转值里有千分位逗号、货币符号、百分号时,先用 String Manipulation 去掉再转

相关内容

页面相关点
Unable to parse as Number转换失败的五种脏值与修法
CSV Reader类型推断扫描行数,以及编码列前导零丢失
Joiner 表连接关联列类型不一致导致全部匹配失败
Sorter 排序器数字按文本排序的判断与修法

不确定某一列是什么类型

点开上游节点的输出表,看列名旁边的图标 – 一秒钟的事,能省半小时。

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

微信扫码咨询

iModel 微信咨询二维码

使用微信扫描上方二维码