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

时间:2018-10-02 15:11:05

标签: apache-nifi jolt

我需要将输入日期更改为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')}

1 个答案:

答案 0 :(得分:1)

显然,我无法在JoltTransformJSON处理器的jolt规范中使用表达式语言访问JSON属性。

我的工作方式是:

  1. 我在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

  2. 在JoltTransformJSON中,我现在可以访问先前提取的Flowfile属性EvaluateJSONPath -> JoltTransformJSON -> ConvertJsonToSql -> PutSql。在Jolt规范中,我更新了默认操作: processed_at

  3. 表达式语言中正确的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')}" } }

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