NiFi Processors之EvaluateJsonPath
NiFi是一个数据处理和分发系统,其中很重要的一部分是处理器(Processors)。一个处理器组合系统间的数据路由、转换或调解。处理器可以访问给定FlowFile的属性及其内容流。处理器可以在给定的工作单元中对零个或多个FlowFile进行操作,并提交该工作或回滚。
本文介绍NiFi处理器之一 :EvaluateJsonPath。
描述
根据FlowFile的内容评估一个或多个JsonPath表达式。这些表达式的结果将分配给FlowFile属性,或者写入FlowFile本身的内容,具体取决于处理器的配置。
通过添加用户定义的属性输入JsonPaths; 属性名称映射到将放置结果的Attribute Name(如果Destination是flowfile-attribute;否则,将忽略属性名称)。该属性的值必须是有效的JsonPath表达式。
属性
这里只介绍我使用过的配置:
名称 | 默认值 | 允许值 | 描述 | 提示 |
---|---|---|---|---|
Destination | flowfile-content | flowfile-content flowfile-attribute |
指示JsonPath评估的结果是写入FlowFile内容还是FlowFile属性; 如果使用属性,则必须指定“属性名称”属性。如果设置为flowfile-content,则只能指定一个JsonPath,并忽略属性名称。 | 我感觉使用’flowfile-attribute’比较方便 |
Return Type | auto-detect | auto-detect json scalar |
指示期望返回的JSON Path的类型。选择’auto-detect’,将为’flowfile-content’返回’json’,为’flowfile-attribute’返回’scalar’。 | 一般使用默认值 |
动态属性
动态属性允许用户指定属性名和属性值。
如果Destination设置为’flowfile-attribute’,这里的动态属性才有用,否则,动态属性将被忽略。
Name | Value |
---|---|
一个FlowFile的属性 | 一个JsonPath表达式 |
使用说明
对于这个处理器,关键属性是Destination,我还没用过flowfile-content,先不说,下面聊聊flowfile-attribute的用法。
使用flowfile-attribute这个属性值,关键是添加FlowFile的动态属性。
场景:
接收的flowfile内容是json字符串:
{
"name":"xingweidong",
"age":1000,
"msg":"Hello world!"
}
额外添加的属性:
Name | Value |
---|---|
name | $.name |
age | $.age |
msg | $.msg |
下游处理器可以使用ReplaceText,用来接收上面自定义的参数,这里使用ReplaceText处理器拼接SQL语句,这也是常见用法,配置如下:
Name | Value |
---|---|
Replacement Value | INSERT INTO msg VALUES('${'name'}','${'age'}','${'msg'}') |
这里注意,作为Value的SQL语句没有分号(????。
ReplaceText处理器的下游可使用PutSQL处理器,PutSQL处理器用来执行SQL语句。
本文主要介绍EvaluateJsonPath处理器,对于ReplaceText处理器和PutSQL处理器不做过多说明。