如何基于FlowFile内容中的整数值路由?能否用RouteOnContent/RouteText实现
直接用RouteOnContent/RouteText实现FlowFile内容数值的路由
用RouteOnContent搞定的步骤
因为你的FlowFile内容就是select count(*)返回的纯整数,直接用RouteOnContent的正则+表达式就能判断:
- 打开RouteOnContent的配置,把
匹配策略设成"匹配所有内容" - 新增一个自定义路由,比如叫
count_over_threshold,对应的正则表达式填:^(\d+)$——这个就是抓内容里的纯整数,确保没多余字符的话直接匹配 - 重点在路由条件里写NiFi表达式:
${content:replaceAll('^(\d+)$', '$1'):gt(100)},把100换成你要的阈值。意思是先把内容里的整数提出来,再判断是不是大于阈值 - 满足条件的走这个自定义路由,不满足的直接走默认的
unmatched路由就行
用RouteText的更简单方式
RouteText对单行文本更友好,配置起来更省事儿:
- 配置RouteText的
记录读取器为「单行记录读取器」,因为你的内容就是单独一行的整数 - 新增路由规则,比如叫
count_exceeds_limit,在过滤条件里直接写:${record:value():gt(100)}——record:value()直接取单行的数值,:gt()就是大于的判断,换阈值就行 - 不满足的同样走
unmatched路由,或者你也可以再加个规则专门处理小于等于的情况
要注意的细节
- 确保FlowFile内容里只有整数,没有换行、空格这些杂项。如果有的话,就在表达式里加个
trim(),比如${content:trim():gt(100)} - 这俩方法都不用先转属性,直接操作内容,省掉ExtractText这类处理器
内容的提问来源于stack exchange,提问作者Vijay Kumar
相关产品推荐
相关产品推荐

