【问题标题】:Nifi: capturing the middle section of a filenameNifi:捕获文件名的中间部分
【发布时间】:2019-08-21 14:37:05
【问题描述】:

我有许多文件要转到 HDFS,命名约定是这样的:

  • acme_beneficiary_20190820
  • acme_stats_20190820
  • acme_provision_20190820
  • acme_sponsor_20190820

我想使用下划线之间的段作为变量来制作 HDFS 路径,所以它看起来像这样:

/my/hdfs/directory/sponsor/2019/

我找到了一种分两步完成此操作的方法,但我认为必须有一种方法可以一步完成。第一步,我有一个“更新属性”处理器,它创建一个具有以下值的变量“file_src”:

${filename:substringAfter('_')}

所以现在它将文件名视为“beneficiary_20190820”等。在此之后,我有另一个“更新属性”处理器,其中有一个名为“dest”的变量,其值如下:

${file_src:substringBefore('_'):toLower()}

所以现在我的 hdfs 目录可以是这样的:

/my/hdfs/directory/${dest}/2019

它有效,但感觉很笨重。有没有办法一步到位?我觉得这些表达式可能是嵌套的或其他东西。提前感谢您的帮助。

【问题讨论】:

    标签: hadoop expression apache-nifi


    【解决方案1】:

    将所有内容放在一个表达式中

    ${filename:substringAfter('_'):substringBefore('_'):toLower()}
    

    您甚至可以直接在 hdfs 目录表达式中使用此表达式,而无需 UpdateAttribute:

    /my/hdfs/directory/${filename:substringAfter('_'):substringBefore('_'):toLower()}/2019
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多