提取某些json对象nifi json

提取某些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

我试图提取json对象并将其存储到hdfs。我的目标是消息属性,即
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请求