使用 Apache Nifi 从第三方收集文件 Rest APi - 流程建议
Using Apache Nifi to collect files from 3rd party Rest APi - Flow advice
我正在尝试在 Apache-Nifi 中创建一个流程以从第 3 方收集文件 RESTful APi 并且我已使用以下内容设置我的流程:
InvokeHTTP - ExtractText - PutFile
我可以收集我想要的文件,因为我已经在我的远程 URL 中指定了它,但是当我从所述文件中获取所有数据时,它正在输出多个(100 个)相同的文件到我的输出目录。
3 件事我需要帮助:
1:如何让流程以可读的 .csv 格式输出文件,而不仅仅是一个没有扩展名的文件
2:一旦我拥有了我需要的所有数据,我该如何停止处理器
3:提供给我的 Json 文件让我可以选择从特定日期范围获取文件:
https://api.3rdParty.com/reports/v1/scheduledReports/877800/1553731200000
或者我可以选择特定文件:
https://api.3rdParty.com/reports/v1/scheduledReports/download/877800/201904/CTDDaily/2019-04-02T01:50:00Z.csv
但是我如何在 Nifi 中创建一个命令来自动检查更新的文件,因为这个过程将 运行 每天进行一次,我们将每天下载一个新文件。
如果这太宽泛,请告诉我以帮助我,以便我可以编辑它 post。
谢谢。
注意:3rdParty 主机名已重命名以符合安全性 - 因此链接将无法直接使用。谢谢。
1) 您使用 UpdateAttribute 处理器将流文件的文件名更改为您想要的任何名称。如果你想让它有一个“.csv”扩展名,那么你可以添加一个名为 "filename" 的 属性,其值为“${filename}.csv”(输入时不带引号) .
2) 默认情况下,大多数处理器的调度策略为 timer-driver 0 秒,这意味着保持 运行 尽可能快。转到调度选项卡上处理器的配置并配置适当的调度,听起来你可能希望 CRON 调度每天调度它。
3) 您可以使用NiFi 表达式语言语句来创建动态时间范围。我不完全理解你必须与之通信的 API 的语法,但你可以为 URL:
做这样的事情
https://api.3rdParty.com/reports/v1/scheduledReports/877800/${now()}
where now() return 当前时间戳作为一个纪元。
如有必要,您还可以将其格式化为日期字符串:
${现在():格式('yyyy-MM-dd')}
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html
我正在尝试在 Apache-Nifi 中创建一个流程以从第 3 方收集文件 RESTful APi 并且我已使用以下内容设置我的流程:
InvokeHTTP - ExtractText - PutFile
我可以收集我想要的文件,因为我已经在我的远程 URL 中指定了它,但是当我从所述文件中获取所有数据时,它正在输出多个(100 个)相同的文件到我的输出目录。
3 件事我需要帮助:
1:如何让流程以可读的 .csv 格式输出文件,而不仅仅是一个没有扩展名的文件
2:一旦我拥有了我需要的所有数据,我该如何停止处理器
3:提供给我的 Json 文件让我可以选择从特定日期范围获取文件:
https://api.3rdParty.com/reports/v1/scheduledReports/877800/1553731200000
或者我可以选择特定文件:
https://api.3rdParty.com/reports/v1/scheduledReports/download/877800/201904/CTDDaily/2019-04-02T01:50:00Z.csv
但是我如何在 Nifi 中创建一个命令来自动检查更新的文件,因为这个过程将 运行 每天进行一次,我们将每天下载一个新文件。
如果这太宽泛,请告诉我以帮助我,以便我可以编辑它 post。
谢谢。
注意:3rdParty 主机名已重命名以符合安全性 - 因此链接将无法直接使用。谢谢。
1) 您使用 UpdateAttribute 处理器将流文件的文件名更改为您想要的任何名称。如果你想让它有一个“.csv”扩展名,那么你可以添加一个名为 "filename" 的 属性,其值为“${filename}.csv”(输入时不带引号) .
2) 默认情况下,大多数处理器的调度策略为 timer-driver 0 秒,这意味着保持 运行 尽可能快。转到调度选项卡上处理器的配置并配置适当的调度,听起来你可能希望 CRON 调度每天调度它。
3) 您可以使用NiFi 表达式语言语句来创建动态时间范围。我不完全理解你必须与之通信的 API 的语法,但你可以为 URL:
做这样的事情https://api.3rdParty.com/reports/v1/scheduledReports/877800/${now()}
where now() return 当前时间戳作为一个纪元。
如有必要,您还可以将其格式化为日期字符串:
${现在():格式('yyyy-MM-dd')}
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html