提取某些json对象nifi json
我试图提取json对象并将其存储到hdfs。我的目标是消息属性,即提取某些json对象nifi json,json,hdfs,apache-nifi,minify,Json,Hdfs,Apache Nifi,Minify,我试图提取json对象并将其存储到hdfs。我的目标是消息属性,即a6、b6、c6、d6、e6 json示例 { "@timestamp":"2020-07-06T07:35:29.047Z", "@metadata":{ "beat":"filebeat", "type":"_doc", "vers
a6、b6、c6、d6、e6
json示例
{
"@timestamp":"2020-07-06T07:35:29.047Z",
"@metadata":{
"beat":"filebeat",
"type":"_doc",
"version":"7.7.1"
},
"log":{
"offset":91,
"file":{
"path":"C:\\Program Files\\Filebeat\\test-kafka\\test_csv.csv"
}
},
"message":"a6,b6,c6,d6,e6",
"input":{
"type":"log"
},
"ecs":{
"version":"1.5.0"
},
"host":{
"name":"host"
},
"agent":{
"version":"7.7.1",
"type":"filebeat",
"ephemeral_id":"0b4a288f-f7ac-4db9-835e-60ca07a45fff",
"hostname":"host",
"id":"5e2fec03-bbdc-4f91-acc9-4ab36c7268db"
}
}
GenerateFlowFile属性
JsonePath属性
但问题jsonevaluepath
并没有像我预期的那样工作,我认为它将只提取消息属性
hadoop@ambari:~$ hdfs dfs -cat /user/test/5a422f02-9074-4384-a3c9-f3e3ce7c2e40
{
"@timestamp":"2020-07-06T07:35:29.047Z",
"@metadata":{
"beat":"filebeat",
"type":"_doc",
"version":"7.7.1"
},
"log":{
"offset":91,
"file":{
"path":"C:\\Program Files\\Filebeat\\test-kafka\\test_csv.csv"
}
},
"message":"a6,b6,c6,d6,e6",
"input":{
"type":"log"
},
"ecs":{
"version":"1.5.0"
},
"host":{
"name":"host"
},
"agent":{
"version":"7.7.1",
"type":"filebeat",
"ephemeral_id":"0b4a288f-f7ac-4db9-835e-60ca07a45fff",
"hostname":"host",
"id":"5e2fec03-bbdc-4f91-acc9-4ab36c7268db"
}
}
我遗漏了什么吗?因为您使用了EvaluateJsonPath,目标设置为流文件属性,它将消息提取到流文件属性中,流文件的内容仍然与以前相同。在PutHDFS之前,您需要使用另一个处理器(如AttributesToJson)来用所需的属性重写流文件内容。另一种方法是将EvaluateJsonPath destination设置为流文件内容,但我不确定这是否会生成有效的json。亲爱的Bryan,非常感谢您的精彩解释。因为我想将
消息提取为a6、b6、c6、d6、e6
。我在PutHDFS
之前添加了AttributeToJson
处理器。当我运行它时,我检查了在<代码>中的队列:AtestTojJSON< /COD>和<代码> PutHDFS < /代码>。它仍然是整个json格式。你能帮我吗?我也使用了tred``AttributeToCSV,它返回了相同的结果。因为我不太了解nifi的属性和内容,所以当我将flowfile属性
更改为flowfile内容
时,它返回了我所期望的结果。很高兴您能使用它,如果您使用AttributesToJson,则需要将目标属性设置为content而不是Attribute,以供参考,所有流文件都有属性和内容,这就像带有标头和正文的http请求