今天要来介绍的是 NiFi Expression Language (以下简称NEL)。在前一篇我们已经介绍了 Variables 和 Parameters 这两种概念,其中 Variables 会从上游的 Processors 所产生的attributes 带到下游的 Processors,但有时候我们会需要利用这些 attributes 做一些处理、判断等操作,这时候就可以透过 NEL 来做到这件事情了,所以下面我们就开始来了解一下如何运用吧
NEL 我们可以想成他是在 NiFi 内建好的 function,根据官方文件,我们可以将大概分为以下几类:
Boolean Logic
这一类简单来说就是回传一些 Bool 的 NEL,以及一些条件判断的 NEL,ex. ifElse, isNull, equals, etc.
String Manipulation
这一类则是做一些字串的操作,例如大小写转换、append 字串、substring等相关字串应用。对应的 NEL 有 toUpper, toLower, trim, replace, etc.
Encode/Decode Functions
这一类则是将字串转成特定格式的编码,ex. escapeJson, escapeCsv, etc.
Searching
这一类则是搜寻字串内的字,或是做一些包含等判断,ex. startWith, in, contains, matches, etc.
Mathematical Operations and Numeric Manipulation
这一类就很单纯地是做一些数学运算的处理,ex. plus, minus, mod, etc.
Date Manipulation
这一类是做一些日期上的运算,ex. format, toDate, now, etc.
Type Corericon
这一类则是做些转型的运算,ex. tostring, toNumber, toDecimal, etc.
Subjectless Functions
这一类则是用在不需要配合 Variables 的 NEL,像是要取的 ip, hostname 等,他可以直接 ${ip}
, ${hostname}
来做呼叫,就不用像其他类 ${variables:function()}
这样的方式做使用。
Evaluating Multiple Attributes
这一类则是针对多的 attributes 作处理和判断,当然也可以用 and 或 or 等做运算,但 NiFi 也有提供类似的 NEL 来做类似的处理。
在 NEL 的用法上,Variables 後面透过 :
来接 NEL function,就代表该 Variables 套用到这个 function上;此外,NEL 可采用 link-usage,也就是 Variables 後面可以接多的 NEL,范例如下:
${filename:toUpper():equals("HELLO.TXT")}
这个意思就是在 FlowFile 中的 filename 这个 attributes 的 value,先转成大写,接着判断是否为 "HELLO.TXT"。所以可以发现,我们可以在後面接续着很多的 NEL function,这就是 Link-usage。
这里我们在拿先前用到的例子来做简单的说明,我们来看一下红框中的 RouteOnAttribute Processor,如果大家还记得的话,这个 Processor 是可以由我们自定义 output 出去的 Connection:
其中内部的设定长得像这样:
embark_c: ${embark:equals("C")}
embark_q: ${embark:equals("Q")}
embark_s: ${embark:equals("S")}
代表着流到这里的 FlowFiles 都会有一个 embark
这个 attributes,我们希望当它等於 C 的时候流向 embark_c
Connection; 等於 Q 的时候流向 embark_q
Connection; 而等於 S 的时候则流向 embark_c
的 Connection。
所以我们就可以透过 NEL 搭配 Variables 来做一些处理及判断,这样的操作是不是相对简单呢?
这边再带另外一个范例,是关於时间的操作,我们简单拉一个 GenerateFlowFile 的 Processor 就好:
其中内部的设定长这样:
datetime: ${now()}
timestamp: ${now():toNumber()}
today_format: ${now():format('yyyy-MM-dd')}
yesterday: ${now():toNumber():minus(86400000):format('yyyy-MM-dd')}
就可以看到 FlowFiles 会产生对应的 attributes:
所以透过这样简单的范例,想必大家都大概知道 NEL 是如何操作的了,今天这篇提了两个简单小范例,在系列文最後面会有一个比较大的场境应用,到时候也会有较复杂的 NEL 操作,但只要读者们掌握好 NEL 的精髓和使用方式,其实就很容易上手了。
今天大概提了一下 NEL 的用法与操作,其实真的不难,只要掌握好原则,再搭配 document 的范例与说明,就能轻松将 attributes 处理成自己想要的样子。
到这篇为止,大致上 NiFi 本身几个重要的 Componenet 都介绍到一轮了,像是 Processor, Connection, Processor Group等,明天开始我们会进入到下一个环节,也就是与DB, Cloud 服务的对接说明,主要会拿 DB, AWS 和 GCP 来做一个介绍与范例,这样的范例在实务上是很常用到的,同时也是非常重要的议题,所以接下来的几篇,也要好好地学起来!
今天又跟大神学习 重新认识 Vue.js | Kuro Hsu 1-7 元件的生命周期与更新机制,(...
课後测验 单选题 感知层(单选题) 1.下列哪一项不属於物联网的应用? A.洗衣机於电费最低时段自...
大家都说"工欲善其事必先利其器",在我们发开 Angluar 时,必需了解一个非...
大4pin针脚定义 1 - 12V 黄色线2 - 0V 黑色线3 - 0V 黑色线4 - 5V 红...
我们透过简单的regression来认识如何设置model及如何使用pytorch设置loss fu...