我需要将输入日期更改为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.覆盖processed_at,并通过toDate函数将其转换为日期 3.通过格式化功能
将其格式化为我想要的格式这是行不通的,在最好的情况下,我得到的是一个空的processing_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')}
答案 0 :(得分:1)
显然,我无法在JoltTransformJSON处理器的jolt规范中使用表达式语言访问JSON属性。
我的工作方式是:
我在JoltTransformJSON之前添加了一个EvaluateJSONPath处理器,并提取了obj <- create.obj(n=10)
obj <- adv.obj(obj, times = 5)
# Error in `:=`(age, new.age) :
# Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are
# defined for use in j, once only and in particular ways. See help(":=").
作为Flowfile属性。
我的流程如下所示:processed_at
在JoltTransformJSON中,我现在可以访问先前提取的Flowfile属性EvaluateJSONPath -> JoltTransformJSON -> ConvertJsonToSql -> PutSql
。在Jolt规范中,我更新了默认操作:
processed_at
表达式语言中正确的SQL日期字段格式为:
{
"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')}"
}
}
现在流程将行插入数据库中。