今天要來講的主題是 - Variables & Parameters。如果讀者們還記得 FlowFiles 在 Data Pipieline 的流動時,上一個 Processor 所產生的 attributes 或 content 是會帶到下一個 Processor 繼續作處理,此時我們要如何對這些 attributes 來做引用呢?
再加上有些attributes 的 value 是可重複使用的,我們不希望每次都填入一樣的value,我們可以透過Variables & Parameters 來定義成一個變數,即可做設定,這樣後續若要變更 value 的時候我們只要更改一個地方,就不需要一一作更改了。
所以有了這些前言,我們就可以帶到今天的 Variables & Parameters。
Parameters 可以想像成我們定義了一組 config,而這組 config 當中有許多 key-value 的設定值,然後 Processor Group(PG) 就可以對接這組 config,即可運用裡面的 key-value 所有的設定值來做使用。
首先一樣在主畫面點選 Global Menu
內的 Parameter Contexts
:
接著我們就可以加入一組 Parameter Contexts
,這邊我們加入一個名為 titanic_parameters
:
接著點選右邊的 PARAMETERS
,我們就可以加入我們要的 config,然後以 key-value 的形式,假設我這邊加入一個 data_path 的 key,value 為 /tmp/datasets
(原始資料存放的 folder path):
其中,若使用者認為這個 value 是屬於敏感性資料的話,你可以勾選 Sensitive Value
為 Yes,NiFi 就會幫這個 Value 作隱藏且加密。
加入完成之後,我們就可以看到剛剛建立的這組 Parameters Contexts 底下有一個 key: data_path
且 value: /tmp/datsets
:
設定完 Parameters 之後,接著就是要綁定到我們要用的 PG,所以我們先點選 PG 的 configuration:
然後就可以選擇我們要的 Parapeter Context:
設定完成之後,我們就可以採用 titanic_parameters
底下的 Parameter,該如何做使用呢?其實是有對應的語法:
#{parameter_key}
透過 #
來做引用,所以我們在 ListFile
的 Processor 可以做紅框這樣的設定:
NiFi 就會把對應的 value 傳入進去,就可運作這個 Processor 了。
這樣的操作是不是很簡單,所以我們可以想像一個 Data Pipeline 會有他專屬自己的 config,裡面可能是會重複使用的 value,這時候我們就可以透過 Parameter Contexts
來做設定與對接,這樣會來在修正時就不需要一個一個改,同時也可做好統一管理的功能。
接著要介紹的是 Variables,通常就是用來使用上游 Processor 帶下來的 attributes,先來講他的語法,只跟 paramaters 有些微的差異,就是改透過 $
來做引用:
${attributes}
接著我們來帶一個範例,一樣延續剛剛在 Parameters 的範例,我們在 ListFile 後面加入 UpdateAttribute 和 FetchFile 這兩個 Processor:
我們先看一下經過 ListFile
所產生出來的 attributes 有哪些,來點選 Processor 的 View data provenance
:
接者點選對應的 FlowFiles,然後看 Attributes,我們會看到所有的 attributes:
接下來我們拿 absolute.path
和 filename
這兩個 attbitutes 合併成一個完整檔案絕對路徑的 attributes,所以勢必要取用這兩個,接著就可以透過 Variables 的方式來處理。
我們只要在在 UpdateAttribute
Processor 加入了這個 property,透過 $
做引用:
接著我們再來看一次在 UpdateAttribute
的 FlowFile attributes:
從紅框中就可以看到我們將這兩個 attributes 合併成一個新的 attributes 了。
所以簡單來說,當有需要利用上游 Processor 所產生的 attributes 去做一些處理或是判斷時,就可以透過 Variables 的呼叫方式來做使用。
以上就是針對 Parameters 和 Variables 的介紹,其實都是針對一些 value 去做引用跟處理,只是兩個使用的場境與用途比較不一樣,這裡在簡單整理給各位一個表格:
Parameters | Variables | |
---|---|---|
語法 | #{key} | ${attributes_name} |
場景應用 | 組織 Data Pipeline 常用的設定,變成一組 config | 引用上游 Processor 所產生的 attributes 來做處理或判斷,或是利用 NEL 做計算等 |
介紹完這兩個概念及操作之後,在前方的表格其實我有提到一個名詞,就是『NEL(NiFi Expression Language)』。也就是明天要帶到的主體,同時是 NiFI 自己的語法,其實操作方式與寫法很簡單,然而都是建立於 Parameters 和 Variables 這兩個概念去做延伸的,所以明天的主題對於讀者來說也是不會太困難。