根据 NiFi 中的内容更新属性
Update attributes based on content in NiFi
开发Apache NiFi自定义处理器时如何给当前流文件添加属性
我想要做的是用计算值向当前流文件添加一个新属性(或至少更新当前属性)。
或者是否有我可以使用的已经构建的处理器?
NiFi 支持多种创建和更新属性的方法,具体取决于您希望使用的数据源。一些通用处理器包括:
UpdateAttribute - 使用静态值和 NiFi 的表达式语言更新流文件的属性。
您可以使用一个处理器添加尽可能多的属性。我建议浏览 Apache NiFi Expression Language Guide 以了解您可以用它做什么。
ExtractText - 通过将正则表达式应用于流文件内容来设置属性值。
ExecuteScript - ExecuteScript 运行自定义脚本代码,可用于根据需要更新属性。
还有更多特定内容格式,例如:
- EvaluateJsonPath - 对于 JSON
- EvaluateXPath - 对于 XML
我有一个用例,我需要从 Java 样式的属性文件中加载许多属性。这可以通过 ExtractText 来完成,但它需要为每个要支持的 属性 添加一个 属性 和正则表达式。我认为支持文件中的任何属性而不必为每个属性配置处理器会很好。
我想出的解决方案是通过以下脚本使用 ExecuteGroovyScript
处理器:
def ff=session.get();
if (ff != null) {
def properties = new Properties();
def is = ff.read();
properties.load(is);
is.close();
ff.putAllAttributes(properties);
REL_SUCCESS << ff;
}
此脚本从物理文件而不是流文件中读取属性。
def ff=session.get();
if (ff != null) {
def properties = new Properties();
def propertiesFile = new File('/Users/me/mydata/foo.properties')
propertiesFile.withInputStream {
properties.load(it)
}
ff.putAllAttributes(properties);
REL_SUCCESS << ff;
}
开发Apache NiFi自定义处理器时如何给当前流文件添加属性
我想要做的是用计算值向当前流文件添加一个新属性(或至少更新当前属性)。
或者是否有我可以使用的已经构建的处理器?
NiFi 支持多种创建和更新属性的方法,具体取决于您希望使用的数据源。一些通用处理器包括:
UpdateAttribute - 使用静态值和 NiFi 的表达式语言更新流文件的属性。
您可以使用一个处理器添加尽可能多的属性。我建议浏览 Apache NiFi Expression Language Guide 以了解您可以用它做什么。
ExtractText - 通过将正则表达式应用于流文件内容来设置属性值。
ExecuteScript - ExecuteScript 运行自定义脚本代码,可用于根据需要更新属性。
还有更多特定内容格式,例如:
- EvaluateJsonPath - 对于 JSON
- EvaluateXPath - 对于 XML
我有一个用例,我需要从 Java 样式的属性文件中加载许多属性。这可以通过 ExtractText 来完成,但它需要为每个要支持的 属性 添加一个 属性 和正则表达式。我认为支持文件中的任何属性而不必为每个属性配置处理器会很好。
我想出的解决方案是通过以下脚本使用 ExecuteGroovyScript
处理器:
def ff=session.get();
if (ff != null) {
def properties = new Properties();
def is = ff.read();
properties.load(is);
is.close();
ff.putAllAttributes(properties);
REL_SUCCESS << ff;
}
此脚本从物理文件而不是流文件中读取属性。
def ff=session.get();
if (ff != null) {
def properties = new Properties();
def propertiesFile = new File('/Users/me/mydata/foo.properties')
propertiesFile.withInputStream {
properties.load(it)
}
ff.putAllAttributes(properties);
REL_SUCCESS << ff;
}