Apache NIFI的JoltTransformJSON处理器日期格式转换无效果原因排查
Jolt转换不生效的核心原因
- Jolt转换规则的执行体系不支持直接嵌入NiFi Expression Language(EL),你在规范中写的
${Birthday:toDate('MM-dd-yyyy'):format('yyyy-MM-dd')}会被Jolt判定为非合法的Jolt函数调用,不会执行计算,因此Birthday字段保留原始值。 - Jolt有专属的内置函数体系,日期转换需要调用Jolt原生的
toDate、format函数实现,不能混用NiFi EL的函数。
可行解决方案
方案1:调整Jolt规范使用原生函数
你可以将Chain DSL的规范修改为如下内容,直接在Jolt内部完成日期格式转换:
[{ "operation": "modify-overwrite-beta", "spec": { "Birthday": "=format('yyyy-MM-dd', toDate('MM-dd-yyyy', @(1,Birthday)))" } }]
执行后即可得到预期结果:
{ "Name": "Jan", "Birthday": "1994-12-31" }
方案2:使用UpdateRecord处理器完成转换
如果你更熟悉NiFi EL的用法,也可以不用JoltTransformJSON处理器,改用UpdateRecord处理器实现需求:
- 配置Record Reader为
JsonTreeReader,Record Writer为JsonRecordSetWriter - 添加自定义属性:
- 键:
/Birthday - 值:
${field.value:toDate('MM-dd-yyyy'):format('yyyy-MM-dd')}
该方案无需学习Jolt专属语法,更适配NiFI的原生使用逻辑。
- 键:
内容的提问来源于stack exchange,提问作者Ruud Kapteijn
相关产品推荐
相关产品推荐

