除了明确定义的属性之外,删除所有流文件属性

3
我希望在给定的流文件中删除所有属性,除了我明确指定要保留的属性。
以下是示例流文件属性:
name: aaa
Place: bbb
Host: ccc
JsonAttribute: {
    "A": "a",
    "B": "b"
}
data: ddd

我希望只保留HostJsonAttribute

因此,生成的流文件属性应为:

Host: ccc
JsonAttribute: {
    "A": "a",
    "B": "b"
}

如何使用NiFi提供的标准处理器实现这个目标?

重命名属性

是否可以使用相同的过程重命名属性?例如,我想保留上面的属性,但将JsonAttribute重命名为customName

3个回答

2
< p > UpdateAttribute 处理器不仅允许添加/设置流文件属性,还可以删除流文件中现有的属性。

为此,您需要将匹配要删除的所有属性的正则表达式传递给属性 Delete Attributes Expression

在您的情况下,您可以使用负向先行断言来匹配除了您想保留的属性之外的所有属性。

^((?!Host)(?!JsonAttribute).)*$

因此不需要额外的处理器。

保留Host属性,将JsonAttribute移动到不同的属性名称

您应该也可以仅使用单个UpdateAttribute处理器实现第二个行为。

只需向处理器添加一个属性,例如customName,并使用NiFi表达式语言引用旧属性:

${JsonAttribute}

在这种情况下,您还可以简化删除正则表达式,以删除JsonAttribute流文件属性:
^((?!Host).)*$

1

AttributesToJSON处理器可以过滤掉您不需要的数据。您可以在此处理器中设置属性正则表达式。


有没有办法自定义JSON名称,例如将JsonAttributes更改为customName:{"A":"a","B":"b"}? - Prabhanj

1
invokehttp处理器中,有一个Attributes to Send属性,您可以在其中定义要在请求中使用的属性。

因此,您不需要在另一个处理器中过滤属性。


通过将属性设置为Send --> JsonAttribute并尝试一下,但是我收到了400错误请求... - Prabhanj
那是另一个问题。了解httprequest - 它将流文件内容作为主体发送到服务器,并将属性作为http标头发送。 - daggett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接