apache-nifi - Jolt json 转换问题。有一条记录,里面有一个数组,需要转换为记录数组

标签 apache-nifi jolt

我需要在 NIFI 中转换一些流文件,并希望使用 Jolt 转换。我已经玩了一段时间了,无法找出可行的转换。我有...

{
  "asset": "transformer1",
  "readings": {
    "oil_temp": 0.7499248991503604,
    "otc_top_temp": 0.2870503485615279
  },
  "timestamp": "02/17/2020 19:07:31",
  "key": "e2af07ab-4d21-4a70-ba3f-9113bb335d1e"
}

并且需要将其转换为这样的记录数组......

[
  {
    "tag": "transformer1.oil_temp",
    "timestamp": "02/17/2020 19:07:31",
    "value": 0.7499248991503604
  },
  {
    "tag": "transformer1.otc_top_temp",
    "timestamp": "02/17/2020 19:07:31",
    "value": 0.2870503485615279
  }
]

我希望这是可能的。我将非常感谢任何帮助。谢谢。

最佳答案

您可以通过多个转换步骤来实现此目的:

  1. 阅读 map 到列表
  2. 使用 concat 操作创建新标签字段
  3. 仅传递您想要的结果值

震动规范:

[
  {
    "operation": "shift",
    "spec": {
      "readings": {
        "*": {
          "@(2,asset)": "[#2].asset",
          "$": "[#2].name",
          "@": "[#2].value",
          "@(2,timestamp)": "[#2].timestamp"
        }
      }
    }
  }, {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "tag": "=concat(@(1,asset),'.',@(1,name))"
      }
    }
  }, {
    "operation": "shift",
    "spec": {
      "*": {
        "tag": "[&1].tag",
        "timestamp": "[&1].timestamp",
        "value": "[&1].value"
      }
    }
  }
]

输入:

{
  "asset": "transformer1",
  "readings": {
    "oil_temp": 0.7499248991503604,
    "otc_top_temp": 0.2870503485615279
  },
  "timestamp": "02/17/2020 19:07:31",
  "key": "e2af07ab-4d21-4a70-ba3f-9113bb335d1e"
}

输出:

[ {
  "tag" : "transformer1.oil_temp",
  "timestamp" : "02/17/2020 19:07:31",
  "value" : 0.7499248991503604
}, {
  "tag" : "transformer1.otc_top_temp",
  "timestamp" : "02/17/2020 19:07:31",
  "value" : 0.2870503485615279
} ]

在这里测试一下:https://jolt-demo.appspot.com/#inception

关于apache-nifi - Jolt json 转换问题。有一条记录,里面有一个数组,需要转换为记录数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272591/

相关文章:

apache-nifi - NiFi拓扑中收集用户输入的方法

json - 如何编写 jolt 规范以将不同对象转换为数组

java - 震动 : Need to split array and combine with other details

hadoop - 尼菲 : how to use fileFileter for fetching files from hadoop?

elasticsearch - 在NiFi中使用 “ScrollElasticSearchHttp”处理器时出错

groovy - 如何在 'DBCPConnectionPoolLookup'处理器中使用 'ExecuteGroovyScript'?

apache - Nifi org.apache.thrift.transport.TTransportException

Java震动: can't find proper spec for my transformation

java - 使用 Jolt 重新设置 JSON 对象的父级

json - JOLT 仅在不为 NULL 时连接