【问题标题】:extract certain json object nifi Json提取某些json对象nifi Json
【发布时间】:2020-07-07 09:57:20
【问题描述】:

我正在尝试提取 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"
   }
}

我错过了什么吗?

【问题讨论】:

    标签: json hdfs apache-nifi minify


    【解决方案1】:

    由于您使用 EvaluateJsonPath 并将目标设置为流文件属性,因此它将消息提取到流文件属性中,并且流文件的内容仍然与以前相同。您需要在 PutHDFS 之前使用另一个处理器(如 AttributesToJson)来使用您想要的属性重写流文件内容。另一种方法可能是将 EvaluateJsonPath 目标设置为流文件内容,但我不确定这是否会产生有效的 json。

    【讨论】:

    • 亲爱的布莱恩,非常感谢您的精彩解释。因为我想将message 提取为a6,b6,c6,d6,e6。我在PutHDFS 之前添加了AttributeToJson 处理器。当我运行它时,我检查AttributeToJsonPutHDFS 中间的队列。而且还是全json格式。你能帮我吗?我也尝试过 `AttributeToCSV,它返回相同的结果。
    • 因为我不太了解 nifi 的属性和内容,所以当我将 flowfile-attribute 更改为 flowfile-content 时,它会返回我所期望的内容。
    • 很高兴你得到它的工作,如果你使用 AttributesToJson 有一个 Destination 属性需要设置为内容而不是属性
    • 供参考,所有流文件都有属性和内容,就像一个http请求,有headers和body
    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多