NiFi中ConvertJSONToAvro处理器无法解析含null值记录的解决方法
ConvertJSONToAvro处理器支持Null值解析方案
现有处理流程
步骤1:JoltTransformJson补全缺失列
使用modify-default-beta操作补全不存在的字段,配置片段:[{ "operation": "modify-default-beta", "spec": { "my_key": null, // 其余配置项... } }]步骤2:ConvertJSONToAvro格式转换
指定的Avro Schema片段:{ "type": "record", "name": "my_name", "fields": [ { "name": "my_key", "type": "string", // 其余字段配置... } ] }
问题描述
当前流程中,JSON数据里的null值会导致ConvertJSONToAvro将记录送入失败队列,空字符串则可正常处理。字符串类型可以用空字符串替代null,但布尔类型只能使用null,因此需要让处理器支持解析null值。
解决方案
要解决这个问题,只需修改Avro Schema,将字段类型定义为包含null的可空类型,具体如下:
调整后的Avro Schema示例
{ "type": "record", "name": "my_name", "fields": [ // 字符串类型可空配置 { "name": "my_key", "type": ["null", "string"], "default": null }, // 布尔类型可空配置示例 { "name": "my_boolean_field", "type": ["null", "boolean"], "default": null } ] }
关键说明
- Avro的可空类型通过类型数组声明,数组中同时包含
null和目标数据类型(顺序可调整,通常将null放在首位)。 - 添加
default: null配置,可确保字段缺失时自动填充null值,提升兼容性。 - JoltTransformJson的null值补全配置无需修改,保持原有逻辑即可。
内容的提问来源于stack exchange,提问作者Mindaugo
相关产品推荐
相关产品推荐

