ETL工具-nifi乾貨系列 第十一講 處理器UpdateAttribute使用教程

1、在這裏我們重溫下nifi裏面一個重要的概念FlowFile,如下圖所示:

FlowFile:FlowFile代表NiFi中的單個數據。nifi數據流中流動的就是flowfile,每個nifi處理器處理的數據也是基於flowfile的。

FlowFile由兩個組件組成:FlowFile屬性(attribute)和FlowFile內容(content)。內容是FlowFile表示的數據。屬性是提供有關數據的信息或上下文的特徵,它們由鍵值對組成。所有FlowFiles都具有以下標準屬性:

  • uuid:一個通用唯一標識符,用於區分FlowFile與系統中的其他FlowFiles。

  • filename:在將數據存儲到磁盤或外部服務時可以使用的可讀文件名

  • path:在將數據存儲到磁盤或外部服務時可以使用的分層結構值,以便數據不存儲在單個目錄中

flowfile除了自身默認的標準屬性外,用戶還可以自定義屬性,自定義屬性的用途很多,如上節課講的RouteOnAttribute就用到了自定義屬性。

2、處理器UpdateAttribute,該處理器的作用根據名字就可以看出來,就是爲了更新flowFile的屬性存在的,如下圖所示:

 Delete Attributes Expression:正則匹配的屬性將從 FlowFiles 文件中刪除。屬性無論是否由此處理器更新,匹配的現有屬性都將被刪除。

刪除屬性Value值用法如下(概括下來就是支持精確匹配和模糊匹配刪除):

lastUser - 將刪除名稱爲 "lastUser" 的屬性。
user.* - 將刪除以 "user" 開頭的屬性,例如 "username"、"userName"、"userID" 和 "users"。但不會刪除 "User" 或 "localuser"。
(user.*|host.*|.*Date) - 將刪除 "user"、"username"、"userName"、"hostInfo"、"hosts" 和 "updateDate",但不會刪除 "User"、"HOST"、"update" 或 "updatedate"。

 Store State:選擇是否存儲狀態,有Do not store state和Store state locally兩個選項。選擇 “無狀態” 將提供純粹在無狀態方式下更新流文件屬性的默認功能。選擇有狀態的選項將不僅存儲流文件上的屬性,還會存儲在處理器的狀態中。(也就是說無狀態僅僅基於當前flowfile進行計算,有狀態是基於處理器和流經處理器的所有flowfile爲基礎進行計算,如計算flowfile的條數)

Stateful Variables Initial Value如果使用狀態來設置/引用變量,那麼此值將用於設置有狀態變量的初始值。僅在狀態不包含變量值時,此值將在 @OnScheduled 方法中使用。如果以有狀態方式運行,則需要此值,但如果需要,可以爲空。

Cache Value Lookup Cache Size:指定應在緩存中存儲多少個規範查找值。

3、示例:新增不存在屬性,新增一個動態屬性myNickName爲king,如下圖所示

 

 查看數據溯源信息可知flowFile屬性中多了一個myNickName屬性,與此同時查看LogMessage處理器的溯源信息依然可以看到myNickName。

 

4、示例:新增存在屬性,新增一個動態屬性filename爲${filename}.flowfile,如下圖所示

 

 點擊運行,然後查看溯源信息,此時filename已經發生了變更,如下圖所示:

 5、示例:高級用法 存儲狀態,記錄通過該處理器的數據流總和,如下圖所示:

 

 點擊運行,然後查看溯源信息,此時myCount值已經進行統計,如下圖所示:

 6、高級用法,添加規則條件,符合條件時update指定的屬性值,如下圖所示:

 

添加一個rule,如果id的值等於1,就修改name的值爲Java大金剛

 

 

 

 

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