首页 文章

在Apache NiFi中支持JSON Jolt中的concat

提问于
浏览
1

使用Apache NiFi我想基于两个其他字段的串联为JSON流文件中的所有元素添加一个新字段 . 我正在尝试使用 JoltTransformJSON 处理器,但是,我想使用的Jolt变换可以正常使用在线tools但在NiFi中不起作用 . 我怀疑版本问题,但我的Jolt规范可能有些愚蠢 .

输入JSON看起来像这样......

[
  {
    "id": 485842,
    "cc": 1,
    "x": 0,
    "y": null
  },
  {
    "id": 281733,
    "cc": 1,
    "x": 0,
    "y": 10
  },
  {
    "id": 721412,
    "cc": 12,
    "x": 0,
    "y": null
  }
]

我想要的输出是......

[ {
  "id" : 485842,
  "cc" : 1,
  "x" : 0,
  "y" : null,
  "id_cc" : "485842_1"
}, {
  "id" : 281733,
  "cc" : 1,
  "x" : 0,
  "y" : 10,
  "id_cc" : "281733_1"
}, {
  "id" : 721412,
  "cc" : 12,
  "x" : 0,
  "y" : null,
  "id_cc" : "721412_12"
} ]

我在网上使用的Jolt变换site是......

[{
  "operation": "modify-default-beta",
  "spec": {
    "*": {
      "id_cc": "=concat(@(1,id),'_',@(1,cc))"
    }
  }
}]

在NiFi中,我将 JoltTransformJSON 处理器配置为 Modify-Default 并使用这个略微修改的Jolt规范...

{
    "operation": "modify-default",
    "spec": {
      "*": {
        "id_cc": "=concat(@(1,id),'_',@(1,cc))"
      }
    }
}

NiFi验证了这一点,并且该过程运行 . 输出JSON仅包含一个记录,并且添加了一个新字段

"operation": "modify-default"

是否可以快速修复将解决此问题的修改默认操作,还是使用移位操作更简单?

提前感谢任何指针 .

1 回答

  • 2

    经过同事的一些帮助,我找到了一种方法来完成这项工作 .

    首先,将 JoltTransformJSON 处理器的 Jolt Transformation DSL 属性设置为 Chain .

    其次,将Jolt规范设置为以下...

    [{
        "operation": "modify-default-beta",
        "spec": {
          "*": {
            "id_cc": "=concat(@(1,id),'_',@(1,cc))"
          }
        }
    }]
    

    [] 和操作中的 beta 一样至关重要 .

    第三,确保输入Jolt处理器的JSON是一个阵列 .

    得到所有这些正确的,将产生预期的输出 .

相关问题