将属性内的值拆分为多个流文件

Split values inside attribute into multiple flowfiles

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

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

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

我在InvokeHTTP处理器中使用这个属性,但有时会因为数据量大而出现错误。

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

所以,在转换之后我期望:

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

如果还是出错,再拆分,等等...类似二分查找,但不排序。

如何到达?

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
}