Объединить 2 JSON из разных процессоров NiFi
По сути мы сначала из одного источника получаем массив JSON объектов в которых есть некоторые данные Потом получаем id этих данных Потом получаем доп.инфу по этому id далее нам надо как-то объединить эти данные, поместив данные из второго запроса,например, в items
Ответы (2 шт):
Нашел решение. Для начала нам надо знать сколько JSON объектов мы объединяем.
Теперь нам надо создать группу и указать что она конкурентная Process Group FlowFile Concurrency=Single FlowFile Per Node.
Далее в группе делаем следующую структуру в группе

Настройка InvokeHTTP думаю описывать не надо.
Далее в MergeContent настраиваем:
- Merge Strategy=Bin-Packing Algorithm
- Merge Format=Binary Concatenation
- Attribute Strategy=Keep Only Common Attributes
- Minimum Number of Entries=2
- Maximum Number of Entries=2
- Delimiter Strategy=Text
- Header=[
- Footer=]
- Demarcator=,
Обратите внимание на значения 2, именно столько у нас запросов.
В результате будет что-то типа
[/*JSONFromQuery1*/,/*JSONFromQuery2*/]
Отлично. Теперь нам надо их объединить, что делает JOLTTransformJSON.
Его настройки:
Jolt Transformation DSL=Shift
Specification=
{
"*": {
"*": "&"
}
}
Он объединит наши 2 JSON в 1.
Осталось повесить связи обработки ошибок и готово.
Чтобы объединить 2 конкретных (а не любых) JOSN надо использовать стратегию Defragment в процессоре Merge. Для этого рекомендую добавить пару процессоров (в каждую ветку после развилки) UpdateAttribute и задать 3 аттрибута:
fragment.identifier = ${filename}
fragment.index = 0 для первой ветки и 1 для второй
fragment.count = 2 (общее колличество фрагментов)
