etl工具nifi使用系列(一):nifi介绍及基本概念
etl工具nifi使用系列(二):简单数据处理processor的使用
etl工具nifi使用系列(三):关于nifi Expression Language 表达式
etl工具nifi使用系列(四):打印日志调试
etl工具nifi使用系列(五):与外部交互(HDFS、mysql、kafka)
etl工具nifi使用系列(六):使用ExecuteScript执行脚本
etl工具nifi使用系列(七):开发自己的processor
etl工具nifi使用系列(八):调用rest api
nifi表达式概述:
Apache NiFi中的所有数据都由一个称为FlowFile的抽象表示。 FlowFile由两个主要部分组成:内容和属性。 FlowFile的内容部分代表要操作的数据。例如,如果使用GetFile处理器从本地文件系统中提取文件,则文件的内容将成为FlowFile的内容。
FlowFile的属性部分表示关于数据本身或元数据的信息。属性是键值对类型的,表示关于数据的已知信息,以及适用于路由和处理数据的信息。从本地文件系统获取文件的示例中,FlowFile将具有名为“filename“的属性,该属性反映文件系统上文件的名称。此外,FlowFile将具有反映文件所在文件系统上的目录的路径属性“path“.FlowFile还将具有名为“uuid“的属性,该属性是此FlowFile的唯一标识符。有关核心属性的完整列表,请查阅开发人员指南的FlowFile部分。
但是,如果用户无法使用这些属性,那么将这些属性放在FlowFile上并不会带来太大好处。 NiFi表达式语言提供了引用这些属性的能力,将它们与其他值进行比较,并操纵它们的值。表达式语言在整个NiFi应用程序中用于配置处理器属性。 不过,并非所有处理器属性都支持表达式语言。
nifi表达式的结构
NiFi表达式语言是以开始分隔符$ {
开始,并以}
结尾分隔符结束。表达式本身的文本在开始和结束分隔符之间。表达式最基本的形式可以只包含一个属性名称。例如,$ {filename}
将返回“filename”属性的值。
函数调用由5个元素组成。首先,有一个函数调用分隔符”:”。其次是功能的名称 “toUpper”。接下来是一个左括号(,接着是函数参数,必要的参数取决于哪个函数被调用,在这个例子中,我们使用了toUpper函数,它没有任何参数,所以这个元素被忽略最后,右括号)表示函数调用的结束。表达式语言支持许多不同的功能来实现许多不同的目标。
例:$ {filename:toUpper()}
然后我们可以链接多个函数调用,第一个函数的返回值成为第二个函数的主题,其返回值成为第三个函数的主题,等等。继续我们的例子,我们可以通过使用表达式$ {filename:toUpper():equals('HELLO.TXT')}
将多个函数链接在一起。可以链接在一起的功能的数量是没有限制的。
任何FlowFile属性都可以使用表达式语言来引用。 但是,如果属性名称包含“特殊字符”,则必须通过引号引起来。 以下字符均被视为“特殊字符”:
$ (dollar sign)
| (pipe)
{ (open brace)
} (close brace)
( (open parenthesis)
) (close parenthesis)
[ (open bracket)
] (close bracket)
, (comma)
: (colon)
; (semicolon)
/ (forward slash)
* (asterisk)
' (single quote)
(space)
\t (tab)
\r (carriage return)
\n (new-line)
通常,我们需要比较两个不同属性的值。我们可以通过使用嵌套表达式来实现这一点。例如,我们可以检查“filename”属性是否与“uuid”属性相同:$ {filename:equals(${uuid})}
。
数据类型
String 、Number、Decimal、Date
布尔表达式
- isNull
- notNull
- isEmpty
- equals
- equalsIgnoreCase
- gt
- ge
- lt
- le
- and
- or
- not
- ifElse
字符串操作
- toUpper
- toLower
- trim
- substring
- substringBefore
- substringBeforeLast
- substringAfter
- substringAfterLast
- getDelimitedField
- append
- prepend
- replace
- replaceFirst
- replaceAll
- replaceNull
- replaceEmpty
- length
编码/解码 Functions
- escapeJson
- escapeXml
- escapeCsv
- escapeHtml3
- escapeHtml4
- unescapeJson
- unescapeXml
- unescapeCsv
- unescapeHtml3
- unescapeHtml4
- urlEncode
- urlDecode
- base64Encode
- base64Decode
- Searching
- startsWith
- endsWith
- contains
- in
- find
- matches
- indexOf
- lastIndexOf
- jsonPath
数学数字操作
- plus
- minus
- multiply
- divide
- mod
- toRadix
- fromRadix
- random
- math
日期操作
- format
- toDate
- now
- Type Coercion
- toString
- toNumber
- toDecimal
没有subject的function(只有方法)
- ip
- hostname
- UUID
- nextInt
- literal
- getStateValue
提取多个属性
- anyAttribute
- allAttributes
- anyMatchingAttribute
- allMatchingAttributes
- anyDelineatedValue
- allDelineatedValues
- join
- count