繁体   English   中英

Apache Nifi 中 JoltTransformJson 处理器中的 SQL 友好日期格式

[英]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 属性。

我让它工作的方式是:

  1. 我在 JoltTransformJSON 之前添加了一个 EvaluateJSONPath 处理器并提取了processed_at作为 Flowfile 属性。 我的流程如下所示: EvaluateJSONPath -> JoltTransformJSON -> ConvertJsonToSql -> PutSql

  2. 在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')}" } }

  3. 表达式语言中正确的 SQL 日期字段格式为: yyyy-MM-dd HH:mm:ss.SSS

现在流程将行插入到数据库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM