ETL工具-nifi干货系列 第十讲 处理器RouteOnAttribute(数据流路由)
1、今天我们一起来学习下处理器RouteOnAttribute,此处理器的作用是根据属性值进行路由进而来控制数据流的走向。类似于java中的if-else或者switch-case。如下图所示。
GenerateFlowFile 产生测试数据,{"name":"Javax 小金刚","id":"2"}
JoltTransformJSON 转换json结构:{"person":{"name":"Javax 小金刚","id":"2"}}
EvaluateJsonPath 提取指定字段userId,不了解EvaluateJsonPath 可以参考上篇文章
RouteOnAttribute 根据userId属性进行路由,为了演示方便这里仅仅是判断userId=1路由到LogMessage-1,userId=2路由到LogMessage-2,其他数据路由到LogMessage-default
2、RouteOnAttribute处理器功能很明显,根据flowFile的属性进行路由,如下图所示。
Routing Strategy:路由策略,有Route to Property name(本次演示选择此路由策略) 、Route to 'matched' if all match 、Route to 'matched' if any matches 三个选项。
Route to Property name :针对一条路由规则进行控制,如userId=1时路由到LogMessage-1,相当于java中的switch-case。
Route to 'matched' if all match :针对多条路由规则进行控制,如userId=1并且name=Java小金刚路由到LogMessage-xxx,相当于java中的if(userId.equals('1')&&name.equals('Java小金刚')){print('我路由到LogMessage-xxx')}
Route to 'matched' if any matches :针对多条路由规则进行控制,如userId=1或者userId=100路由到LogMessage-kkk,相当于java中的if(userId.equals('1')||name.equals('Java小金刚')){print('我路由到LogMessage-kkk')}
点击+号进行添加路由规则,可以添加一条或者多条。value支持el表达式,el表达式后续专题讲解。
3、双击RouteOnAttribute和LogMessage中间的连线,配置关联关系,此时RouteOnAttribute中配置的test1、test2路由条件会在这里显示,同时还会有一个unmatched选项处理未匹配默认值。
当Routing Strategy路由策略选择Route to Property name时,test1、test2、unmatched三个选项只勾选一个。相当于switch-case,多路分支。
选择Route to 'matched' if all match 或者Route to 'matched' if any matches 之后connection 连线配置的关联选项只有matched和unmatched两个选项,如userId=1或者userId=100路由到LogMessage-kkk,相当于java中的if(userId.equals('1')||name.equals('Java小金刚')){print('我路由到LogMessage-kkk')}
4、LogMessage处理器,该处理器作用是记录日志,相当于kettle中的写日志步骤。设置比较简单,这里不做过多介绍。
5、下图为处理器LogMessage打印的日志信息,在日志文件nifi-app.log 中查看。