我在NiFi中使用EvaluateJsonPath处理器来指定用于将我的JSON数据写入elasticsearch的复合主键 . 我必须通过连接两个属性来创建一个名为'key'的属性,让我们说'attr1'和'attr2' . 在EvaluateJsonPath配置中,我添加了一个值为'$ $ '的属性'key'(我使用此密钥来避免elasticsearch中的冗余) . 但我得到一个错误:'key'无效,因为指定的表达式无效:$ $ .
使用EvaluateJsonPath处理器连接json记录中的2个属性的正确语法是什么?
2 回答
我假设您将术语
attributes
与不同的上下文混合在一起 . 当我第一次拿起NiFi并开始使用JSON时,我就这样做了 . 为了弄清楚,在这种特殊情况下有两种类型的属性:FlowFile attributes - 这些属性类似于FlowFile的元数据,如
filename
,filesize
,mime.type
等 . 当您使用像UpdateAttribute
这样的处理器添加属性时,它们会被添加到FlowFile的元数据中,即FlowFile属性 not 到FlowFile内容本身 .JSON attributes - 这些是FlowFile内容中的字段 . 例如:
Name
是这里的属性 - >{ "Name" : "Smith, John"}
话虽如此,使用
${projectName}, ${filename}
之类的表达式将根据FlowFile attributes
进行评估 . 该语法称为NiFi表达语言 . 他们 won't be 根据FlowFile的内容进行评估 .EvaluateJsonPath
采用类似$.Name
的JSON路径表达式例如,假设您在FlowFile内容中有以下JSON文档:
在这种情况下,您必须使用如下所示的新属性配置
EvaluateJsonPath
处理器:完成后,通过
EvaluateJsonPath
的流文件将上面两个属性添加到flowfile attributes
,您可以使用NiFi Expression(如${attribute1}
)读取这些属性 . 然后将EvaluateJsonPath
处理器连接到UpdateRecord
处理器,您可以在NiFi Expression Language
的帮助下将组合的复合键添加到FlowFile JSON内容中 .Useful Links
NiFi表达语言指南 - https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html
EvaluateJsonPath样本 - 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应该是您想要的 .