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 中查看。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章