在 Apache Nifi 中转换 ExecuteSQL 记录

transform ExecuteSQL record in Apache Nifi

我是 Nifi 的新手,所以还缺乏学习这方面的知识。我的任务是从 executeSQL 和记录 return 中获取数据,如下所示:

[{
  "PKG_HA_01_ON":2.0,
  "PKG_HA_03_ON":28.0,
  "PKG_HA_04_ON":7.0,
  "PKG_HA_05_ON":0.0,
  "PKG_HA_06_ON":1.0,
  "PKG_HA_09_ON":5.0
 },
 {
  "PKG_HA_01_ON":8.02905,
  "PKG_HA_03_ON":57.29038333333333,
  "PKG_HA_04_ON":2.2858666666666663,
  "PKG_HA_05_ON":60.0,
  "PKG_HA_06_ON":12.291533333333332,
  "PKG_HA_09_ON":12.3363
}]

这是联合查询的结果。现在,我想转换成这样:

[{
   "machine":"PKG_HA_01_ON",
   "counter":2.0,
   "duration":8.02905
 },
 {
   "machine":"PKG_HA_03_ON",
   "counter":28.0,
   "duration":57.29038333333333
}]

我研究过 JoltTransformJSON,但仍然坚持使用它。那么达到预期效果的最佳方法是什么 JSON?

提前致谢!!!

您可以连续应用 shift 转换为

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@PKG_HA_01_ON": "PKG_HA_01_ON.&",
        "@PKG_HA_03_ON": "PKG_HA_03_ON.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "&.machine",
        "@(1,&.0)": "&.counter",
        "@(1,&.1)": "&.duration"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": ""
    }
  }
]

在第一步中将结果集限制为两个键 (PKG_HA_01/3_ON),同时分别确定键 01 的值,然后将这些编号的键转换为您的(分别为 counterduration)同时添加 machine 元素,并在最后一步删除键名。