NiFi非Avo JSON读取器/写入器

时间:2018-11-14 09:05:10

标签: json avro apache-nifi

看来,标准的Apache NiFi读写器只能解析基于Avro模式的JSON输入。

Avro模式限制了JSON,例如它不允许以数字开头的有效JSON属性。

JoltTransformJSON处理器可以在这里提供帮助(它没有对输入JSON的外观施加Avro限制),但似乎该处理器不支持批处理FlowFiles。它也不基于读者和作家(也许正因为如此)。

有没有办法读取任意有效的批处理JSON输入,例如多行形式

{"myprop":"myval","12345":"12345",...}
{"myprop":"myval2","12345":"67890",...}

并将其转换为其他JSON结构,例如由JSON schema定义,例如使用JSON Patch转换,而无需编写自己的处理器?

更新

我正在使用Apache NiFi 1.7.1

更新2

不幸的是,@ Shu的建议确实奏效。我收到同样的错误。 将大小写简化为单个UpdateRecord处理器,该处理器读取具有数字属性的JSON并使用

写入不具有此类属性的JSON
myprop : /data/5836c846e4b0f28d05b40202

映射。还是一样的错误:(

enter code here

1 个答案:

答案 0 :(得分:3)

  

它不允许以数字开头的有效JSON属性吗?

此错误NiFi-4612已在NiFi-1.5版本中修复,我们可以使用 AvroSchemaRegistry 定义您的架构并更改

验证字段名称

false

然后我们可以使用以数字开头的avro模式字段名称。

有关更多详细信息,请参见this链接。

  

是否可以读取任意有效的批处理JSON输入,例如多行形式?

此错误NiFi-4456已在NiFi-1.7中修复,如果您未使用此版本的NiFi,则可以通过使用,(逗号分隔符)来创建json消息数组的解决方法。

流量:

1.SplitText //split the flowfile with 1 line count
2.MergeRecord //merge the flowfiles into one
3.ConvertRecord

有关此特定问题的更多详细信息,请参见this链接(我已经在流程中进行了解释)。