如何配置NiFi CSVReader/JSONRecordSetWriter实现CSV转JSON全属性转字符串
NiFi 竖线分隔CSV转全字符串JSON配置方案
不需要手动枚举编写全量Schema,直接调整组件配置即可实现所有字段值统一为字符串类型,完全跳过默认的类型推断逻辑,适配多源异构、字段不固定的CSV处理场景。
CSVReader 核心配置(读取阶段锁死字符串类型)
这一步是核心,从读取环节就避免类型推断,不需要提前定义任何Schema:
- 将
Schema Access Strategy从默认的Infer Schema修改为Use String Fields From Header该策略会自动将CSV首行解析为字段名,所有字段值强制按字符串类型读取,不会根据内容自动识别为数字、布尔、时间等非字符串类型,字段数量、字段顺序变化都能自动适配,完全不需要手动维护Schema。
- 将
Delimiter配置项的值改为|,匹配竖线分隔的文件格式 - 其余解析配置(如是否跳过首行、引号转义规则、空值处理规则)按实际业务的CSV格式正常设置即可,不会影响字段的字符串类型规则。
JSONRecordSetWriter 配置(输出阶段兜底避免类型转换)
Schema Access Strategy选择Inherit Record Schema,直接继承CSVReader输出的全字符串Schema,不会在JSON写入阶段重新做类型推断Schema Write Strategy按需选择即可,如果后续流程不需要内嵌Schema内容,选择Set 'avro.schema' Attribute即可,不会把Schema信息写到流文件内容里Output Grouping按输出格式要求选:单条记录一行选One Line Per Object,所有记录包成JSON数组选Array即可
效果验证
可以直接用测试样例验证效果,传入如下竖线分隔CSV内容:
user_id|user_name|age|is_active|account_balance 1001|张三|27|true|99.85 1002|李四|42|false|12560
最终输出的JSON所有属性值均为字符串类型,不会出现数字、布尔类的非字符串值:
{"user_id":"1001","user_name":"张三","age":"27","is_active":"true","account_balance":"99.85"} {"user_id":"1002","user_name":"李四","age":"42","is_active":"false","account_balance":"12560"}
内容的提问来源于stack exchange,提问作者Dave Cassel
相关产品推荐
相关产品推荐

