根据 NiFi 中的内容更新属性

Update attributes based on content in NiFi

开发Apache NiFi自定义处理器时如何给当前流文件添加属性
我想要做的是用计算值向当前流文件添加一个新属性(或至少更新当前属性)。
或者是否有我可以使用的已经构建的处理器?

NiFi 支持多种创建和更新属性的方法,具体取决于您希望使用的数据源。一些通用处理器包括:

UpdateAttribute - 使用静态值和 NiFi 的表达式语言更新流文件的属性。

您可以使用一个处理器添加尽可能多的属性。我建议浏览 Apache NiFi Expression Language Guide 以了解您可以用它做什么。

ExtractText - 通过将正则表达式应用于流文件内容来设置属性值。

ExecuteScript - ExecuteScript 运行自定义脚本代码,可用于根据需要更新属性。

还有更多特定内容格式,例如:

我有一个用例,我需要从 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;
}