[英]SQL friendly date format in a JoltTransformJson Processor in Apache Nifi
我需要将输入日期更改为 SQL 友好格式才能将其插入数据库。 尝试插入数据库时,我在imported_at 和processing_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 转换为 processing_at 2. 覆盖 processing_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 规范中,我更新了默认操作: { "operation": "default", "spec": { "processed_at": null, "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
现在流程将行插入到数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.