【发布时间】:2015-12-02 09:15:57
【问题描述】:
Apache NIFI“ExecuteSQL 处理器”能否以块的形式传输大量选择结果,例如“x”MB?
【问题讨论】:
-
据我了解,它是为大型查询而构建的,这就是它流式传输数据的原因。我认为没有任何方法可以将数据分块。我认为分块或“批处理”是专门为 Get 和 Post 处理器保留的。
标签: apache-nifi
Apache NIFI“ExecuteSQL 处理器”能否以块的形式传输大量选择结果,例如“x”MB?
【问题讨论】:
标签: apache-nifi
ExecuteSQL 处理器可以“流式传输”大量行,因为它将数据直接流式传输到 FlowFile 内容(不会保存在内存/堆中),因此内存效率非常高。不过,此时它不会对结果进行分块。不过,有一张票 https://issues.apache.org/jira/browse/NIFI-1251 可以提供此类功能。
【讨论】:
您现在可以使用 QueryDatabaseTable 处理器,它通过“每个流文件的最大行数”属性支持分块。
【讨论】:
您还可以在 SQL 本身中指定限制语句(以及按 ID 排序),拉一批,获取最后一个 ID,拉所有 >max(id),重复直到完成,即
Start
|
UpdateAttr: maxid--------- SQL ... $maxid:isEmpty():ifElse('', 'where id>maxid') order by id limit n
|_____________________________|
|
do sth
它是由 # 个记录而不是大小 - 但知道每条记录的大约大小,您仍然可以这样做
【讨论】: