Удобный для SQL формат даты в процессоре JoltTransformJson в Apache Nifi - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно изменить введенную дату в удобном для SQL формате, чтобы вставить ее в БД.При попытке вставить в БД я получаю ошибки как import_at, так и Process_at.

Мой поток: JoltTransformJSON -> ConvertJsonToSql -> PutSql

Ввод:

{
  "transactionDate": "2018-01-01T18:06:00",
}

My Spec:

[
  {
    "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. переместить транзакциюDate в processing_at 2. переопределить обработанный_ат и преобразовать его в дату с помощью функции toDate 3. отформатировать в желаемый формат с помощью функции форматирования

Это не работает, в лучшем случае я либо получаю пустое имя_процесса, либо начальное значение.

Я пытался

${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 голосов
/ 04 октября 2018

Очевидно, я не могу получить доступ к свойствам JSON с помощью языка выражений в спецификации jolt в процессоре JoltTransformJSON.

Я заставил его работать так:

  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

Теперь поток вставляет строки в базу данных.

...