概述
CSV 为逗号分隔文件格式,以逗号为默认分隔符,并支持自定义其他分隔符。CSV 文件不带 schema 自描述信息,读取时需要由用户声明字段名、列序号与字段类型;支持通过 Quote character 将含分隔符的内容作为完整值读取。本文介绍 CSV 格式在 DataBuddy 数据接入中的支持能力、参数设置与类型转换规则。
支持的能力
支持的参数设置
以下为任务级参数,在数据同步模式下配置于任务的读取节点。
参数 | 说明 | 是否必填 | 默认值 |
文件类型 | 选择 CSV | 是 | TXT |
字段分隔符 | 将每行切分为列的分隔符;不支持 ${} | 是 | , |
行分隔符 | 切分行;最多配置 3 个;不填时按运行环境默认(Linux \\n,Windows \\r\\n);不支持 ${} | 否 | — |
编码 | utf8 / gbk | 是 | utf8 |
压缩格式 | none / deflate / gzip / bzip2 / lz4 / snappy;snappy 仅支持 hadoop-snappy 与 framing-snappy 两种 stream format | 是 | none |
Quote character | 无配置 / 双引号 " / 单引号 ',将引号内内容作为完整值读取 | 否 | 无配置 |
跳过表头 | 是否跳过文件首行;勾选后可从首行表头自动生成字段名 | 是 | 否 |
空值转换 | 读取时将指定字符串转为 NULL;不支持 ${} | 否 | — |
说明:
字段分隔符与行分隔符不支持
${},因为 ${a} 会被识别为调度参数。字段值中包含分隔符(如地址中的逗号)时,建议源端使用引号包裹,并在任务中配置对应的 Quote character。
支持的类型转换
CSV 文件不携带类型信息,字段类型由用户在任务中声明,可声明类型如下:
可声明类型 | 说明 | 默认值 |
STRING | 字符串,所有内容按原样读取 | 是(缺省即 STRING) |
LONG | 长整型 | 否 |
DOUBLE | 双精度浮点型 | 否 |
BOOLEAN | 布尔型 | 否 |
DATE | 日期时间型,必须填写日期格式,如 yyyy-MM-dd HH:mm:ss | 否 |
字段配置方式:
字段名:由用户填写;勾选「跳过表头」时可从首行表头自动生成。
列序号:从 0 开始,与文件中的列位置一一对应。
映射结果进入字段映射组件,支持手工调整目标字段与类型。
说明:
声明的类型与实际内容不匹配时,解析失败的记录会进入脏数据处理链路。建议在正式调度前通过调试运行校验类型声明。
常见问题
Q:CSV 与 TXT 有什么差异?
A:两者均为按分隔符切分的文本格式,参数项一致;CSV 以逗号为默认分隔符,并支持通过 Quote character 将含分隔符的内容作为完整值读取,常用于标准 CSV 文件。
Q:字段值中包含分隔符(如地址中的逗号)被错误切分?
A:建议源端使用引号包裹该字段,并在任务中配置对应的 Quote character(双引号
" 或单引号 ')。Q:CSV 文件读取后所有字段都是字符串,如何得到数值或日期类型?
A:CSV 不携带类型信息,需要在字段配置中显式声明类型(STRING / LONG / DOUBLE / BOOLEAN / DATE)。未声明时缺省为 STRING。
Q:声明为 DATE 但解析失败?
A:DATE 类型必须填写日期格式(如
yyyy-MM-dd HH:mm:ss),且需与文件中的实际写法一致。格式不匹配的记录会进入脏数据处理链路。Q:字段分隔符、行分隔符可以填 ${} 吗?
A:不可以。两者均不支持
${},因为 ${a} 会被识别为调度参数。Q:行分隔符不填会怎样?
A:按运行环境的默认换行符处理:Linux 为
\\n,Windows 为 \\r\\n。Q:列序号从几开始计数?
A:从 0 开始,与文件中的列位置一一对应。
Q:压缩格式应该怎么选?
A:需与文件实际的外层压缩方式保持一致;选择 snappy 时,仅支持 hadoop-snappy 与 framing-snappy 两种 stream format。
Q:勾选「跳过表头」后还需要填写字段名吗?
A:不需要。勾选后系统会从文件首行表头自动生成字段名,仍可手工修改。