提取某些 json 对象 nifi Json

extract certain json object nifi Json

我正在尝试提取 json 对象并将其存储到 hdfs。我的目标是 message 属性,即 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 属性

JsonEvaluatePath 属性

但是问题 JsonEvaluatePath 没有像我预期的那样工作,我认为它只会提取消息属性。

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 目标设置为流文件内容,但我不确定这是否会产生有效的 json.