Nifi ReplaceText Процессор вставляет строки нулевой длины - PullRequest
0 голосов
/ 02 июля 2018

Процессор Apache Nifi ReplaceText работает не так, как я ожидаю. Я не могу понять, почему при вычислении выражения вставляются строки нулевой длины, куда должны направляться данные.

Конфигурация процессора ReplaceText:

Стратегия замены: Всегда заменять.

Режим оценки: весь текст.

Цепочка процессоров: QueryDatabaseTable-> SplitAvro-> UpdateAttribute-> ReplaceText-> PutSQL

Значение замены в процессоре ReplaceText:

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES ('${payee}', ${amount}, '${billed_date}', '${paid_date}');

Это должно стать….

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES ('Dead End LLC', 2000.000, ‘2018-02-01’, ‘2018-02-01’);

Вместо этого я получаю:

INSERT INTO public.journal (payee, amount, billed_date, paid_date) 
VALUES (‘’, , ‘’, ‘’);

Что особенно расстраивает, когда я смотрю на вывод предыдущего шага процессора UpdateAttribute и вижу…

[ {
  "payee" : "Dead End LLC",
  "amount" : "2000.00",
  "billed_date" : "2018-02-01",
  "paid_date" : "2018-02-02"
} ]

Это ломает мне голову, так как обработка выражения, кажется, работает просто отлично, но не получает правильные данные (что, как предполагает моя наивная реализация, будет).

Предыдущее чтение, которое привело меня туда, где я сейчас нахожусь:

Извлечение базы данных

Вставка базы данных

1 Ответ

0 голосов
/ 02 июля 2018

Причина, по которой вы получаете пустую строку, в том, что выражения для '$ ​​{payee}', $ {amount}, '$ {billed_date}', '$ {paid_date} вычисляются без значения, и это потому, что вы вероятно, нет атрибутов файла потока с этими именами.

Вы не можете перейти непосредственно от значения в Avro в содержимом файла потока к языку выражений NiFi, вам необходимо сначала извлечь значения из содержимого в атрибуты файла потока.

Что-то вроде этого, вероятно, будет работать ...

QueryDatabaseTable-> SplitAvro-> ConvertAvroToJson -> EvaluteJsonPath -> UpdateAttribute -> ReplaceText -> PutSQL

В EvluateJsonPath вы извлекаете значения из json в атрибуты файла потока.

...