我需要将输入日期更改为 SQL 友好格式才能将其插入数据库。尝试插入数据库时,imported_at 和processed_at 均出现错误。
我的流程:JoltTransformJSON -> ConvertJsonToSql -> PutSql
输入:
{
"transactionDate": "2018-01-01T18:06:00",
}
我的规范:
[
{
"operation": "shift",
"spec": {
"transactionDate": "processed_at"
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"processed_at": "=${processed_at.replaceAll('T',' '):toDate('yyyy-MM-dd HH:mm:ss'):format('yyyy-MM-dd HH:mm:ss')}"
}
},
{
"operation": "default",
"spec": {
"processed_at": null,
"imported_at": "${now():format('yyyy-MM-dd HH:mm:ss')}"
}
}
]
我的想法是这样的: 1.将transactionDate转移到processed_at 2.重写processed_at并通过toDate函数将其转换为日期 3.通过format函数将其格式化为我想要的格式
这不起作用,在最好的情况下,我要么得到一个空的processed_at,要么得到初始值。
我试过了
${processed_at.replaceAll('T',' '):toDate('yyyy-MM-dd HH:mm:ss'):format('yyyy-MM-dd HH:mm:ss') )}
${processed_at:toDate('yyyy-MM-ddTHH:mm:ss'):format('yyyy-MM-dd HH:mm:ss')}
最佳答案
显然,我无法使用 JoltTransformJSON 处理器中的 jolt 规范中的表达式语言访问 JSON 属性。
我的工作方式是:
我在 JoltTransformJSON 之前添加了一个 EvaluateJSONPath 处理器,并将
processed_at
提取为 Flowfile 属性。 我的流程如下所示:EvaluateJSONPath -> JoltTransformJSON -> ConvertJsonToSql -> PutSql
在 JoltTransformJSON 中,我现在可以访问之前提取的 Flowfile 属性
processed_at
。在 Jolt 规范中,我更新了默认操作:{ “操作”:“默认”, “规范”:{ “processed_at”:空, "processed_at": "${processed_at:replace('T', ''):toDate('yyyy-MM-ddHH:mm:ss'):format('yyyy-MM-dd HH:mm:ss.SSS' )}" } }
表达式语言中正确的 SQL 日期字段格式为:
yyyy-MM-dd HH:mm:ss.SSS
现在流程将行插入数据库。
关于apache-nifi - Apache Nifi 中 JoltTransformJson 处理器中 SQL 友好的日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52611258/