NiFi JsonRecordSetWriter跳过嵌套字段
我正在将卡夫卡主题中的消息拉入NiFi,并且发现JsonRecordSetWriter没有输出嵌套字段的问题。如果我从该编写器切换到CSV编写器,我不会遇到相同的问题,但是Avro和XML编写器都有相同的问题,因此我认为这是推断模式的问题 以下是我的简化输入:NiFi JsonRecordSetWriter跳过嵌套字段,json,apache-nifi,avro,Json,Apache Nifi,Avro,我正在将卡夫卡主题中的消息拉入NiFi,并且发现JsonRecordSetWriter没有输出嵌套字段的问题。如果我从该编写器切换到CSV编写器,我不会遇到相同的问题,但是Avro和XML编写器都有相同的问题,因此我认为这是推断模式的问题 以下是我的简化输入: { "data": [ { "object": { "extensions": {
{
"data": [
{
"object": {
"extensions": {
"field1": "TS",
"field2": "howdy"
}
}
},
{
"object": {
"extensions": {
"field1": "TT",
"field3": "something"
}
}
}
]
}
以及输出:
[ {
"data" : [ {
"object" : {
"extensions" : {
"field1" : "TS",
"field2" : "howdy"
}
}
}, {
"object" : {
"extensions" : {
"field1" : "TT",
"field2" : null
}
}
} ]
} ]
如果我使用CSV writer,第一条记录会得到字段1和2,第二条记录会得到字段1和3,因此JSONRecorderReader正确地从Kafka读取了数据,而JsonRecordSetWriter没有正确地写入数据。看起来模式推理引擎正在读取数组中的第一条记录作为其模式,然后根据该记录进行输出。字段2是输出,不管它在记录2中是否存在,而字段3则被忽略,因为它在记录1中不存在
知道得比我多的人有什么建议吗
提前感谢您的帮助 不幸的是,我解决了我的问题,但没有弄清楚为什么会这样。我解决这个问题的方法是从ConsumeKafkaRecord处理器切换到ConsumeKafka处理器,它不使用JSONterReader和JsonRecordSetWriter控制器来处理Json。因为我从Kafka中提取的值已经在Json中了,所以将它们作为字符串获取并从那里开始(添加application/Json mime.type以确保它们得到正确处理)对我来说效果很好 这个问题也可以通过创建一个包含所有可能字段的模式来解决,但这会导致大量空字段,因为记录的填充非常稀疏,而且我的一个字段以符号开头,NiFi在任何地方都使用Avro格式的模式,这使问题更加复杂,所以我必须解决这个问题(NiFi 1.7中的错误修复允许这样做,但也有局限性)
所以我在路上——不确定这段经历是否会帮助别人,但如果真的这样做,那太好了!p> 我在使用普通JSON的transformRecord时遇到了几乎相同的问题。简言之,流在应用程序事件s3中列出了一个条目,并将这些事件的jonson转换为两种类型: 1-雅典娜桌 2-用于HTTP调用
每个事件文件包含超过200个事件,并且在这些事件的中间包含了一个嵌套的“特征”,并且来自这些特征的信息从来没有出现过(这是一个事件很少出现在这个“集合”事件中,大约1到2%个事件在存档中,但是它们非常重要)。 我不得不修改我的流程的开始,使其工作
流程是: ListS3->FetchS3Object->jolttransferormrecord->SplitJson->EvaluateJsonPath 并留下: ListS3->FetchS3Object->ConvertRecord->SplitJson->JoltTransformMJSON->EvaluateJsonPath 现在它工作得很好。 @Chrick解决方案帮助我确定了错误是什么,由于我的问题有点不同,我希望这能帮助一些人