它解决什么问题
把纯文本的表格文件读成数据表。和 Excel Reader 的分工很直白:xlsx 用 Excel Reader,csv 和 txt 用它。同样支持文件夹模式批量读。
CSV 文件本身不记录自己是什么编码。这是它和 xlsx 最大的差别,xlsx 自带编码信息,csv 全靠读的人指定。国内从 Excel「另存为 CSV」出来的文件基本都是 GBK,而 KNIME 默认按 UTF-8 读,中文就散了。
它在流程里的位置
整条流程的第一个节点。这里把编码和列类型设对,后面能省掉一大半排查。
基本信息
| 英文原名 | CSV Reader |
|---|---|
| 中文名称 | CSV 读取器(iModel 中文界面) |
| 节点库位置 | IO → Read → CSV Reader |
| 输入端口 | 无必需端口。可选一个文件系统连接端口 |
| 输出端口 | 1 个数据表 |
| 支持格式 | csv、txt,以及任何用固定分隔符的纯文本表格 |
配置项逐条
-
Encoding / Charset字符集
国内文件先试 GBK,还有生僻字读不出就换 GB18030。从系统导出、明确说了是 UTF-8 的才保持默认。设错的表现是中文变成问号或一串符号,但节点是绿灯不报错。
-
Column delimiter列分隔符
默认逗号。中文 Windows 环境下 Excel 导出的 csv 有时用分号,制表符分隔的 txt 要填
\t。读进来只有一列,多半就是这里没对上。 -
Quote character引号字符
字段内容本身含逗号时,文件会用引号把它包起来。默认双引号,一般不用改。地址、备注这类长文本字段出错时看这一项。
-
Skip first lines跳过开头若干行
文件开头有报表标题、导出时间、口径说明时,填要跳过的行数。跳完之后第一行才是表头。
-
Has column header首行是表头
不勾的话列名会变成
Col0、Col1,第一行数据也会被当成数据保留。系统直接导出的明细文件有时确实没有表头。 -
Limit rows for type detection类型推断扫描行数
靠扫描前若干行猜列类型。脏值出现在扫描范围之外,执行时才炸。文件大且质量不稳时调大这个值,或者直接在类型页手工指定。
CSV Reader 配置对话框
字符集Encoding
UTF-8GBKGB18030ISO-8859-1
国内文件先试 GBK。设错不报错,只是中文变乱码。
列分隔符Column delimiter
,;\t|
读进来只有一列,先查这一项。
跳过开头行数Skip first lines
0文件顶上有标题和导出时间时填实际行数。
列类型Transformation / Type
自动推断,可逐列改写
身份证号、银行账号、部门编码这类列务必手工指定为文本,否则前导零会被吃掉。
三个常见坑
- 编码列的前导零消失了。
007被推断成数字,读进来变成7;身份证号更惨 – 超过 15 位会变成科学计数法,末几位直接失真且不可逆。凡是「看起来像数字但实际是编号」的列,都要在类型设置里手工指定为文本。这是国内数据场景最常见也最要命的一个坑。 - 中文乱码。改字符集即可。展开讲的在报错排查那一组里有单独一篇,含 Excel 打开导出文件乱码的反向情况。
- 读进来只有一列,整行挤在一格里。分隔符没对上。用文本编辑器打开文件看一眼第一行是用什么分开的,比在这里挨个试快。
什么时候该换别的节点
| 情况 | 换成 |
|---|---|
| 文件是 xlsx 或 xls | Excel Reader |
| 每行结构不规整,不是标准表格 | Line Reader 先整行读进来,再自己拆 |
| 要把结果写成 csv | CSV Writer,编码同样要设 |
| 数据在数据库里 | DB Connector 加 DB Query Reader |

