Процессор Apache NiFivalujsonpath: выражение JSONPath для объединения двух атрибутов

Я использую процессор EvaluateJsonPath в NiFi, чтобы указать составной первичный ключ для записи моих данных JSON в эластичный поиск. Я должен создать атрибут под названием "ключ", объединив два атрибута, скажем, "attr1" и "attr2". В конфигурации EvaluateJsonPath я добавил свойство 'key' со значением '${attr1}${attr2}' (я использую этот ключ, чтобы избежать избыточности в asticsearch). Но я получаю сообщение об ошибке: "ключ" недопустим, поскольку указанное выражение недопустимо: ${attr1}${attr2}.

Каков правильный синтаксис для объединения двух атрибутов в записи json с использованием процессора EvaluateJsonPath?

2 ответа

Решение

Я полагаю, вы смешали термин attributes с разными контекстами. Я сделал это, когда впервые взял NiFi и начал работать с JSON. Чтобы прояснить ситуацию, в данном конкретном случае есть два типа атрибутов:

  1. Атрибуты FlowFile - это атрибуты, которые похожи на метаданные FlowFile, например filename, filesize, mime.typeи т. д. При добавлении атрибута с использованием процессора, такого как UpdateAttribute они добавляются в метаданные FlowFile, то есть атрибуты FlowFile, а не в сам контент FlowFile.
  2. Атрибуты JSON - это поля в содержимом FlowFile. Пример: Name это атрибут здесь -> { "Name" : "Smith, John"}

Сказав это, используя выражения как ${projectName}, ${filename} оцениваются против FlowFile attributes, Этот синтаксис называется языком выражения NiFi. они не будут сравниваться с содержимым FlowFile. EvaluateJsonPath принимает выражение пути JSON как $.Name

Например, предположим, что у вас есть следующий документ JSON в содержимом FlowFile:

{
    "attr1": "some value for attr1",
    "attr2": "some value for attr2"
}

В этом случае вам придется настроить EvaluateJsonPath процессор с новыми свойствами, которые выглядят следующим образом:

attribute1 : $.attr1
attribute2 : $.attr2

После этого потоковые файлы, которые проходят через EvaluateJsonPath будет иметь два вышеупомянутых атрибута, добавленных к flowfile attributes который вы можете прочитать, используя NiFi Expression, как ${attribute1}, Затем подключите EvaluateJsonPath процессор для UpdateRecord процессор, где вы можете добавить комбинированный составной ключ с помощью NiFi Expression Language к содержимому JSON FlowFile.

Полезные ссылки

EvaluateJsonPath ожидает оператор JSONPath, похоже, что в этом случае вы хотите взять два атрибута и создать один из них с помощью языка выражений NiFi. Если это так, то UpdateAttribute должен быть тем, что вы хотите. Если вы хотите вставить составной ключ в контент, тогда UpdateRecord должен быть тем, что вам нужно.

Другие вопросы по тегам