首页 > 解决方案 > 将属性内的值拆分为多个流文件

问题描述

我有一个包含空内容和一些属性的流文件。

我对属性感兴趣ids,它包含带有分隔符的 id 列表。

1018866556,1018878837,1018522766,1018522773,1018522788,1018522790,1018522797,
1018522959,1018522963,1018522968,1018522972,1018522981,1018511143,1018511174

我在InvokeHTTP处理器中使用此属性,但有时由于数据量大而出现错误。

如果发生错误,我想拆分此属性内的值。我应该得到两个流文件,而不是一个在每个流文件中具有相同(或接近)数量的 id。

所以,经过改造,我期望:

  1. 流文件#1ids 1018866556,1018878837,1018522766,1018522773,1018522788,1018522790,1018522797
  2. 流文件#2ids 1018522959,1018522963,1018522968,1018522972,1018522981,1018511143,1018511174

如果仍然出现错误,则再次拆分它们,等等......就像二进制搜索但没有排序。

如何到达?

标签: apache-nifi

解决方案


ExecuteGroovyScript处理器脚本:

def ff=session.get()
if(!ff)return

def idList = ff.ids?.split(',')
if ( idList.size()>1 ){
    def sublistSize = (idList.size()/2).round() as int
    def ffList = idList.collate(sublistSize).collect{sublist-> 
            ffOut = ff.clone(true)
            ffOut.ids = sublist.join(',')
            ffOut
        }
    REL_SUCCESS << ffList
    ff.remove()
}else{
    REL_SUCCESS << ff
}


推荐阅读