NiFi GetFile处理器中的文件过滤器属性的正则表达式失败

时间:2016-11-08 11:46:11

标签: apache-nifi

我有一个要复制到HDFS的文件列表。

文件名如下:

  1. Sample-11072016
  2. Sample-11082016
  3. 采样11062016
  4. 采样11062016
  5. Denodo-09082016
  6. Denodo-09122016
  7. Denodo-11082016
  8. Denodo-11072016
  9. 现在我正在尝试编写一个正则表达式,它会选择今天的 Sample 文件。 文件后面的数字是日期,如

      

    Sample-11082016是日期为11/08/2016的文件

    我试过的正则表达式是[Sample]-(0-9){8} 这个正则表达式将返回包含所有日期的所有Sample文件,因为我正在检查8位数。 您能否建议如何在今天的日期找到该文件。 这里的问题是文件名 Sample 保持不变,因为日期不断变化。 我必须编写一个正则表达式,以便它只选择今天的日期文件。

    我对Regex很新,是否有可能写一个正则表达式来检查日期是否是今天的日期。

    任何建议都会有所帮助。 NIFI正则表达式规则与Java Regex规则相同。 应使用正则表达式对File Filter处理器<{1}}属性

    此致

    Sai_PB。

2 个答案:

答案 0 :(得分:3)

你几乎就在正则表达式上了。通过&#34; Sample&#34;在方括号之间(&#39; [&#39;和&#39;]&#39;),你说&#34;第一个字符应匹配其中一个字符&#34;。这是一个link,它可以更深入地解释它(请参阅&#34;字符类&#34;部分)。

同样通过放置&#34; 0-9&#34;在paranthesis,你说&#34;捕获这个匹配角色&#39; 0-9&#39;恰好&#34 ;.这是你想要方括号的地方。

所以你应该使用的正则表达式是&#34; Sample- [0-9] {8}&#34; (您可以使用&#34; \ d&#34;而不是&#34; 0-9&#34;但我希望保留尽可能多的初始正则表达式。)

您可以使用此website测试正则表达式。

为了解决获取当天日志文件的第二个问题,您应该能够使用上述正则表达式作为文件过滤器。然后调整&#34;调度策略&#34;每天运行一次(预计文件将在当天写入)。最后设置&#34;最大文件年龄&#34;至&#34; 24小时&#34; (根据需要进行调整,以确保只有最新版本有效)。这些配置将导致处理器每天运行一次,只选择与相应过滤器匹配且不超过一天的文件。

答案 1 :(得分:0)

我今天遇到了同样的问题,我正在使用List SFTP从ftp服务器获取文件并将其放入HDFS。 我能够放入文件过滤器,但是无法添加今天的日期,因为列表SFTP文件过滤器不支持nifi表达式语言。 我在源端提出了一个解决方案,将日常文件准备好后将它们移动到另一个文件夹,这样我将始终在源文件夹中获取新文件。 另外,您可以通过下面的线程查找有关此问题的其他解决方法。

http://apache-nifi.1125220.n5.nabble.com/How-to-get-ftp-file-according-to-Current-date-td16412.html

问候 尼丁