【问题标题】:Apache NIFI "Execute Processor"Apache NIFI“执行处理器”
【发布时间】:2015-12-02 09:15:57
【问题描述】:

Apache NIFI“ExecuteSQL 处理器”能否以块的形式传输大量选择结果,例如“x”MB?

【问题讨论】:

  • 据我了解,它是为大型查询而构建的,这就是它流式传输数据的原因。我认为没有任何方法可以将数据分块。我认为分块或“批处理”是专门为 Get 和 Post 处理器保留的。

标签: apache-nifi


【解决方案1】:

ExecuteSQL 处理器可以“流式传输”大量行,因为它将数据直接流式传输到 FlowFile 内容(不会保存在内存/堆中),因此内存效率非常高。不过,此时它不会对结果进行分块。不过,有一张票 https://issues.apache.org/jira/browse/NIFI-1251 可以提供此类功能。

【讨论】:

    【解决方案2】:

    您现在可以使用 QueryDatabaseTable 处理器,它通过“每个流文件的最大行数”属性支持分块。

    【讨论】:

      【解决方案3】:

      您还可以在 SQL 本身中指定限制语句(以及按 ID 排序),拉一批,获取最后一个 ID,拉所有 >max(id),重复直到完成,即

                                             Start
                                               |
          UpdateAttr: maxid--------- SQL ... $maxid:isEmpty():ifElse('', 'where id>maxid') order by id limit n
                 |_____________________________|
                                               |
                                              do sth
      

      它是由 # 个记录而不是大小 - 但知道每条记录的大约大小,您仍然可以这样做

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2019-03-16
        相关资源
        最近更新 更多