我在 NiFi GetFile 处理器中的文件过滤器属性的正则表达式失败
My Regex for File Filter Attribute in NiFi GetFile Processor is Failing
我有一个要复制到 HDFS 的文件列表。
文件名如下:
- 示例 11072016
- 示例 11082016
- 示例 11062016
- 示例 11062016
- Denodo-09082016
- Denodo-09122016
- Denodo-11082016
- 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
问候
尼丁
我有一个要复制到 HDFS 的文件列表。
文件名如下:
- 示例 11072016
- 示例 11082016
- 示例 11062016
- 示例 11062016
- Denodo-09082016
- Denodo-09122016
- Denodo-11082016
- 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
问候 尼丁