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

My Regex for File Filter Attribute in NiFi GetFile Processor is Failing

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

文件名如下:

  1. 示例 11072016
  2. 示例 11082016
  3. 示例 11062016
  4. 示例 11062016
  5. Denodo-09082016
  6. Denodo-09122016
  7. Denodo-11082016
  8. Denodo-11072016

现在我正在尝试编写一个正则表达式来选择今天的 Sample 文件。 文件后面的数字是

中的日期

Sample-11082016 is the file of date 11/08/2016

我试过的正则表达式是[Sample]-(0-9){8} 当我检查 8 位数字时,此正则表达式将 return 所有具有所有日期的示例文件。 你能建议如何找到今天日期的文件吗? 这里的问题是文件名 Sample 在日期不断变化的情况下保持不变。 我必须编写一个正则表达式,以便它只选择今天日期的文件。

我对正则表达式很陌生,是否可以编写一个正则表达式来检查日期是否是今天的日期。

任何建议都会有所帮助。 NIFI 正则表达式规则与 Java 正则表达式规则相同。 应针对 GetFile 处理器

File Filter 属性使用正则表达式

此致,

Sai_PB.

你几乎已经掌握了正则表达式。通过将 "Sample" 放在方括号(“[”和“]”)之间,您表示 "The first character should match one of these characters"。这里有一个 link 对其进行了更深入的解释(请参阅 "Character Classes" 部分)。

另外,在括号中加上“0-9”,就是说 "Capture this group that matches the characters '0-9' exactly"。这是你想要方括号的地方。

所以您应该使用的正则表达式是 "Sample-[0-9]{8}"(您可以使用“\d”而不是“0-9”,但我想尽可能多地保留您的初始正则表达式)。

您可以使用此 website.

测试您的正则表达式

为了解决获取当天日志文件的第二个问题,您应该可以使用上述正则表达式作为文件过滤器。然后将"Scheduling Strategy"调整为运行,每天一次(预计当天写完文件后)。最后将 "Maximum File Age" 设置为“24h”(根据需要进行调整以确保只有最新的有效)。这些配置将导致处理器每天 运行 一次,只选择一个与适当的过滤器匹配且不早于一天的文件。

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

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

问候 尼丁