etl工具nifi使用系列(三):关于nifi Expression Language 表达式

原文链接 http://nifi.apache.org/docs.html

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

猜你喜欢

转载自blog.csdn.net/quguang65265/article/details/78701346