2

我在 NiFi 中使用 EvaluateJsonPath 处理器来指定一个复合主键,用于将我的 JSON 数据写入弹性搜索。我必须通过连接两个属性来创建一个名为“key”的属性,比如说“attr1”和“attr2”。在 EvaluateJsonPath 配置中,我添加了一个值为 '${attr1}${attr2}' 的属性 'key'(我使用这个键来避免弹性搜索中的冗余)。但是我收到一个错误,例如:'key' is invalid 因为指定的表达式无效:${attr1}${attr2}。

使用 EvaluateJsonPath 处理器在 json 记录中连接 2 个属性的正确语法是什么?

4

2 回答 2

7

我假设您将该术语attributes与不同的上下文混合在一起。当我第一次拿起 NiFi 并开始使用 JSON 时,我就这样做了。为了澄清事情,在这种特殊情况下有两种类型的属性:

  1. FlowFile 属性- 这些属性有点像FlowFile 的元数据,例如,filename ,filesizemime.type。当您使用处理器添加属性时,就像UpdateAttribute它们被添加到 FlowFile 的元数据中一样,即 FlowFile 属性而不是FlowFile 内容本身.
  2. JSON 属性- 这些是 FlowFile 内容中的字段。例如:Name这里是一个属性->{ "Name" : "Smith, John"}

话虽如此,使用类似的表达式${projectName}, ${filename}是针对FlowFile attributes. 这种语法称为 NiFi 表达式语言。它们不会根据FlowFile 的内容进行评估。EvaluateJsonPath采用 JSON 路径表达式,例如$.Name

例如,假设您在 FlowFile 内容中有以下 JSON 文档:

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

在这种情况下,您必须EvaluateJsonPath使用如下所示的新属性配置处理器:

attribute1 : $.attr1
attribute2 : $.attr2

完成后,通过 的流文件EvaluateJsonPath将添加上述两个属性flowfile attributes,您可以使用 NiFi 表达式(如${attribute1}. 然后将EvaluateJsonPath处理器连接到处理器,您可以在其中借助FlowFile JSON 内容UpdateRecord添加组合的复合键。NiFi Expression Language

有用的链接

于 2018-08-14T04:57:16.090 回答
1

EvaluateJsonPath 需要一个 JSONPath 语句,在这种情况下,您似乎想要获取两个属性并使用 NiFi 表达式语言从它们中创建一个。如果是这种情况,那么 UpdateAttribute 应该是您想要的。如果您希望将复合键插入到内容中,那么 UpdateRecord 应该是您想要的。

于 2018-08-13T12:33:51.620 回答