Процессор Apache NiFivalujsonpath: выражение JSONPath для объединения двух атрибутов
Я использую процессор EvaluateJsonPath в NiFi, чтобы указать составной первичный ключ для записи моих данных JSON в эластичный поиск. Я должен создать атрибут под названием "ключ", объединив два атрибута, скажем, "attr1" и "attr2". В конфигурации EvaluateJsonPath я добавил свойство 'key' со значением '${attr1}${attr2}' (я использую этот ключ, чтобы избежать избыточности в asticsearch). Но я получаю сообщение об ошибке: "ключ" недопустим, поскольку указанное выражение недопустимо: ${attr1}${attr2}.
Каков правильный синтаксис для объединения двух атрибутов в записи json с использованием процессора EvaluateJsonPath?
2 ответа
Я полагаю, вы смешали термин attributes
с разными контекстами. Я сделал это, когда впервые взял NiFi и начал работать с JSON. Чтобы прояснить ситуацию, в данном конкретном случае есть два типа атрибутов:
- Атрибуты FlowFile - это атрибуты, которые похожи на метаданные FlowFile, например
filename
,filesize
,mime.type
и т. д. При добавлении атрибута с использованием процессора, такого какUpdateAttribute
они добавляются в метаданные FlowFile, то есть атрибуты FlowFile, а не в сам контент FlowFile. - Атрибуты 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.
Полезные ссылки
- Руководство по языку выражений NiFi - https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html
- Оцените примеры JsonPath - https://community.hortonworks.com/questions/106210/how-to-use-evaluate-json-path-in-nifi.html
- UpdateRecord - https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.7.1/org.apache.nifi.processors.standard.UpdateRecord/additionalDetails.html
EvaluateJsonPath ожидает оператор JSONPath, похоже, что в этом случае вы хотите взять два атрибута и создать один из них с помощью языка выражений NiFi. Если это так, то UpdateAttribute должен быть тем, что вы хотите. Если вы хотите вставить составной ключ в контент, тогда UpdateRecord должен быть тем, что вам нужно.