Nifi ExecuteSQL在块中获取记录

时间:2019-01-14 07:33:32

标签: apache-nifi

我正在尝试使用ExecuteSQL处理器从mysql(just like cursor)批量获取数据。我的ExecuteSQL属性是:

Max Rows Per Flow File :  100
Output Batch Size : 10

但是,除非处理器执行并获取所有数据,否则它会卡住。我需要在此处模拟类似场景的光标。

就像mysql发送一些数据说100一样,它会从中创建一个流文件,而当创建10个这样的流文件时,处理器会将其发送到下一行进行处理。

1 个答案:

答案 0 :(得分:0)

根据NiFi-1251 Jira,从NiFi-1.8开始

  • ExecuteSQL处理器将发送大量流文件,即在您的情况下,一旦从数据库中提取了 Ashwins-MacBook-Pro:blockchain ashwin$ python test.py 2.7.10 (default, Aug 17 2018, 19:45:58) [GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] Expected: Ashwins-MacBook-Pro:blockchain ashwin$ python test.py 3.7 (default, Aug 17 2018, 19:45:58) [GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.0.42)] ,然后是 ExecuteSQL 处理器将 发送流文件 以进行进一步处理。

如果您使用的是 first 100 rows 版本,那么我们需要等到从数据库中提取所有行。

(或)

另一个解决方法是

  1. 使用 < NiFi-1.8 处理器生成sql select查询的行页面。

  2. 使用 GenerateTableFetch 处理器执行页面sql查询。

流量:

ExecuteSql

请参阅this链接,以获取有关GenerateTableFetch处理器的更多详细信息。