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

如何用Apache NiFi表达式语言从CSV提取正则匹配值并新增字段

解决方案:用UpdateRecord从CSV字段提取数值并新增latitude字段

针对你的需求,最直接的方案是正确配置UpdateRecord处理器的表达式语言,无需额外引入ExtractText,以下是具体步骤:

1. UpdateRecord核心配置

  • 保持已配置的CSVReader和CSVRecordSetWriter不变,确保input_schema已正确包含description字段
  • Update Strategy选择Update if Not Null(避免为无匹配值的记录生成空的latitude字段,若需要保留空字段可选Always Update)
  • 在User-Defined Properties中新增字段映射:
    • 键:latitude
    • 值:${description:replaceRegex('.*?(\d+\.\d+).*', '$1'):default('')}

关键说明:

  • 正则.*?(\d+\.\d+).*采用非贪婪匹配(.*?)捕获第一个符合格式的小数数值,$1表示引用捕获到的数值内容
  • 后缀:default('')用于处理无匹配值的情况,可根据需求替换为'N/A'或'null'
  • 如果需要同时匹配整数(如12345),可将正则调整为.*?(\d+(\.\d+)?).*

2. 排查之前replaceRegex失效的原因

你之前用replaceRegex未得到预期结果,大概率是正则写法问题:

  • 若直接写${description:replaceRegex('\d+\.\d+', '$0')},只会替换匹配到的数值部分,而非提取出数值作为新字段的值
  • 必须通过.*?和.*包裹捕获组,将整个description字段内容替换为捕获到的目标数值

3. 备选方案:JoltTransformRecord

如果需要更复杂的字段转换逻辑,可改用JoltTransformRecord处理器,Jolt规范示例如下:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "latitude": "${description:replaceRegex('.*?(\\d+\\.\\d+).*', '$1'):default('')}"
    }
  }
]

该方案原理与UpdateRecord一致,适合多字段联动转换的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:36:02