我正在使用Convert AvroToJson处理器将avro转换为json,然后使用表达式$。*拆分json,以将json数组拆分为单个记录。
如果json中有单个元素而不是数组,则失败。
有人可以帮助正则表达式同时支持数组和单个元素。
答案 0 :(得分:3)
您可能想尝试将ConvertRecord处理器与AvroReader和JsonWriter一起使用,然后将SplitRecord的记录计数设为1。
也有可能避免拆分成单独的记录。通常,这样做是为了处理每条记录,但是使用记录处理器,您通常可以在适当的位置处理它们,从而通过不拆分来显着提高性能。
答案 1 :(得分:1)
好吧,您没有什么可以分割为单个元素的。如果要避免单个元素失败,可以使用ConvertRecord
代替ConvertAvroToJson
。
区别在于,ConvertRecord
将为您提供属性record.count
,该属性告诉您此FlowFile(以及更通用的流程)中包含多少记录。
这将允许您在RouteOnAttribute
和ConvertRecord
之间放置一个中间处理器(SplitJSON
)。
因此您可以按以下方式对其进行配置:
路由策略=如果所有匹配都路由到“匹配”
match(动态属性)= $ {record.count:equals(1)}
然后,将连接matched
关系转移到位于SplitJSON
之后的处理器,然后将unmatched
连接到SplitJSON
处理器。
这样,如果只有一条记录(该记录不需要拆分),它将避免使用处理器SplitJSON
。