Day13 NiFi - Variables & Parameters

今天要来讲的主题是 - Variables & Parameters。如果读者们还记得 FlowFiles 在 Data Pipieline 的流动时,上一个 Processor 所产生的 attributes 或 content 是会带到下一个 Processor 继续作处理,此时我们要如何对这些 attributes 来做引用呢?

再加上有些attributes 的 value 是可重复使用的,我们不希望每次都填入一样的value,我们可以透过Variables & Parameters 来定义成一个变数,即可做设定,这样後续若要变更 value 的时候我们只要更改一个地方,就不需要一一作更改了。

所以有了这些前言,我们就可以带到今天的 Variables & Parameters。

Parameters

Parameters 可以想像成我们定义了一组 config,而这组 config 当中有许多 key-value 的设定值,然後 Processor Group(PG) 就可以对接这组 config,即可运用里面的 key-value 所有的设定值来做使用。

How to use?

首先一样在主画面点选 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_pathvalue: /tmp/datsets:

Bind Processor Group

设定完 Parameters 之後,接着就是要绑定到我们要用的 PG,所以我们先点选 PG 的 configuration:

然後就可以选择我们要的 Parapeter Context:

设定完成之後,我们就可以采用 titanic_parameters 底下的 Parameter,该如何做使用呢?其实是有对应的语法:

#{parameter_key}

透过 # 来做引用,所以我们在 ListFile 的 Processor 可以做红框这样的设定:

NiFi 就会把对应的 value 传入进去,就可运作这个 Processor 了。

这样的操作是不是很简单,所以我们可以想像一个 Data Pipeline 会有他专属自己的 config,里面可能是会重复使用的 value,这时候我们就可以透过 Parameter Contexts 来做设定与对接,这样会来在修正时就不需要一个一个改,同时也可做好统一管理的功能。

Variables

接着要介绍的是 Variables,通常就是用来使用上游 Processor 带下来的 attributes,先来讲他的语法,只跟 paramaters 有些微的差异,就是改透过 $ 来做引用:

${attributes}

接着我们来带一个范例,一样延续刚刚在 Parameters 的范例,我们在 ListFile 後面加入 UpdateAttribute 和 FetchFile 这两个 Processor:

我们先看一下经过 ListFile 所产生出来的 attributes 有哪些,来点选 Processor 的 View data provenance

接者点选对应的 FlowFiles,然後看 Attributes,我们会看到所有的 attributes:


接下来我们拿 absolute.pathfilename 这两个 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 这两个概念去做延伸的,所以明天的主题对於读者来说也是不会太困难。

Reference


<<:  12. 为何要订明确的职涯阶梯?

>>:  Day19什麽是JavaScript?

D27 - 用 Swift 和公开资讯,打造投资理财的 Apps { 三大法人成交比重实作.2 }

先制作出简单的一个 VC 上面显示取得的三大法人资料的日期。 拉出两个 Button、一个 stat...

JavaScript学习日记 : Day11 - 函数绑定

当object中的function作为callback function传递给setTimeout时...

Day 8 ROS Client Library 与 Roscpp

ROS Client Library ROS 最为一款广为人知的机器人作业系统,当然也能让很多种程序...

(MVC,JS)FormData 的运用

小弟是初新者,第一次写笔记,写不好请见谅也请多指教! 因为公司功能需求有去接触到,想说尝试做个笔记与...

Day05 - Nginx 设定

闲话家常 前面几天都是枯燥乏味的设定,也是很重要的。要有一个稳定的环境,才能够专心在Coding。 ...