You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效移除仅含{}的空Flowfile?求Jolt Spec等优化方案

高效移除仅含{}的空FlowFile方案

以下是几种简洁高效的实现方案,可大幅减少处理器数量和处理耗时:

方案1:Jolt转换 + 属性路由(2个原生处理器)

利用NiFi原生的Jolt工具标记空JSON,再通过属性路由过滤:

  1. 添加JoltTransformJSON处理器,使用如下Spec:
[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "isEmptyJson": "=size(@) == 0"
    }
  }
]

该Spec会给FlowFile新增isEmptyJson属性,当内容为{}时属性值为true,否则为false。
2. 添加RouteOnAttribute处理器,设置路由规则:

  • Keep:${isEmptyJson:equals('false')}
  • Drop:${isEmptyJson:equals('true')}
    将Drop分支指向Terminate处理器直接丢弃空文件。

方案2:Groovy脚本单处理器搞定

用ExecuteScript处理器执行Groovy脚本,直接判断并处理:

def flowFile = session.get()
if (!flowFile) return

def content = session.read(flowFile).text.trim()
if (content == "{}") {
    session.remove(flowFile)
} else {
    session.transfer(flowFile, REL_SUCCESS)
}

脚本逻辑简单:读取内容并去除首尾空白,判断是否为{},是则移除,否则放行。

方案3:正则路由(单原生处理器,性能最优)

用RouteOnContent处理器直接匹配内容:

  1. 选择Content Regex模式,添加路由规则:
    • Drop:^\s*\{\}\s*$(匹配可能含首尾空白的纯{}内容)
    • Keep:.*
  2. 将Drop分支的目标设置为Terminate,符合条件的空FlowFile会被直接丢弃。

方案选型建议

  • 追求无脚本、最高稳定性:选方案3,纯原生处理器,性能最佳;
  • 后续需做JSON转换处理:选方案1,顺便完成空文件标记;
  • 快速实现、代码极简:选方案2,单处理器搞定。

内容的提问来源于stack exchange,提问作者samrathal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:52:46