大大毛 的筆記

            DDM's Note

          哪怕沒有辦法一定有說法,
          就算沒有鴿子一定有烏鴉,
          固執無罪 夢想有價,
          讓他們驚訝.

          posts - 14, comments - 23, trackbacks - 0, articles - 58
             :: 首頁 ::  :: 聯系 ::  :: 管理

          日歷

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          公告

          果然是不能想得太好。

          隨筆分類(4)

          積分與排名

          • 積分 - 60900
          • 排名 - 865

          最新評論

          RouteOnAttribute的用法

          Posted on 2019-04-11 16:55 大大毛 閱讀(1867) 評論(0)  編輯  收藏 所屬分類: Nifi
          RouteOnAttribute
              這個組件的是用途是根據Attribute的值進行Route分流,從輸入輸出的角度來看,它可以把一個Input分成多個Output出來,它的分支不同于程序中的Switch語法,而等效于多條的IF語句,也就是說若Output的條件全部都符合,它是可以把1個輸出Copy到多個輸出的,所以它也可以用于條件復制的應用上。
              關于資料落地的文章里我有提到過Route的使用范圍,它應該用在能夠以Key做分支條件的場景,也就是說相同的Key一定會走固定的Output出來,這樣才不會出現資料亂序的狀況。下面有兩個示例,第一個是典型的分支用法,第二個比較有意思,它的作用相當于Oracle中的Decode語法

          示例1
              使用Route做流程的分支,根據一個叫SO的欄位是否為空決定走不同的流程(左右的UpdateAttribute可以把它們想象成兩個完全不同的處理流程來看)




              RouteOnAttribute作用是根據Attribute的Bool值來決定是否進入該分支

          • HasSO / NonSO:這是我自行定義的兩個Route名稱 (不是屬性名稱),Value是一個表達式,若它的值=true,則Output會進該Route
            • Nifi的表達式語法不怎么好寫,官方的文檔上有些東西并不支持 (不確定是不是Nifi版本緣故)。這里還是可以看得出來就只是判斷一個叫SO的Attribute的值是否為空 --- 還記得有些Processor里面還有叫"Null Value Representation"的屬性吧,若是那里配成"null"那這里也要與之匹配。
          • 經過該Processor處理后,SO為空的會走右端邏輯,而不為空的則會走左段邏輯,同時它會加多一個叫"RouteOnAttribute.Route"的Attribute,內容即為Route名稱

          示例2:
              根據多個欄位是否有值(不為空),讓它們能夠進入不同的Route,后面再根據Route名稱去動態的取值,它的特點是Nifi流程并沒有出現分支(Connection上是勾了所有的Route),只是為不同的數據設上了一個變量名稱



              RouteOnAttribute,借用分支名稱在后面搞事,這里相當于是給資料加上了一個變量名稱

          • MO / MODELFAMILY / UPN / USN:這是定義的四個Route名稱,判斷條件都很簡單,就只是不為空
            • 值得注意的是這4個條件并非是互斥條件,比如有一筆資料它的MO、USN都不為空,那么就會同時進入兩個Route進行輸出,所以Output筆數會是2
            • 下面這是進入UPN這個Route后的資料上的Attribute: "RouteOnAttribute.Route"



              UpdateAttribute,比較精彩的用法

          • mqttTopic:這是定義的一個MQTT的Topic變量,它的內容是可變動的,會根據Route的不同產生不同的結果
            • MO/MODELFAMILY/UPN/USN這4個條件有任一不為空,則會要求推送Topic: xxxx/【Type】/【Value】/yyyy
              • 【Type】: 為"mo"、"modelfamily"、"upn"、"usn"這四個值之一
              • 【Value】: 為MO/MODELFAMILY/UPN/USN這四個Attribute的取值 (即 ${MO} / ${MODELFAMILY} / ${UPN} / ${USN} 的值),這里使用了雙層${${"RouteOnAttribute.Route"}}的取值方法來實現動態的取用變量值



          i am ddm

          主站蜘蛛池模板: 通化市| 漾濞| 库车县| 义乌市| 土默特左旗| 营口市| 和平县| 宜兰市| 静乐县| 怀集县| 建始县| 凭祥市| 昭觉县| 前郭尔| 德江县| 霞浦县| 恭城| 秦安县| 竹北市| 同德县| 汕头市| 嫩江县| 无极县| 剑阁县| 杭锦后旗| 同德县| 宿州市| 思茅市| 东光县| 铜鼓县| 特克斯县| 汉川市| 双桥区| 西乌| 内丘县| 阿鲁科尔沁旗| 富民县| 巴青县| 同德县| 陕西省| 宜良县|