diff --git "a/docs/1-\345\237\272\347\241\200\346\226\207\346\241\243/4-ExpressionLanguageGuide.md" "b/docs/1-\345\237\272\347\241\200\346\226\207\346\241\243/4-ExpressionLanguageGuide.md" index e571e93fc9d69299d640474f340a9f9775edb65b..fdbf1f67e2325d030660b59c0fb96663cf8fc128 100644 --- "a/docs/1-\345\237\272\347\241\200\346\226\207\346\241\243/4-ExpressionLanguageGuide.md" +++ "b/docs/1-\345\237\272\347\241\200\346\226\207\346\241\243/4-ExpressionLanguageGuide.md" @@ -3,9 +3,9 @@ 编辑人:__**le.zw**__ 邮箱:**le.zw@qq.com** *** -[TOC] -##1.概述 + +## 1.概述 Apache NiFi 中的所有数据都通过流文件“FlowFile”的抽象表示。FlowFile由两个主要部分组成:内容和属性。FlowFile的内容部分表示要操作的数据。例如,如果使用GetFile 组件从本地文件系统中获取文件,则该文件的内容将成为FlowFile 的内容。 @@ -13,7 +13,7 @@ FlowFile的属性部分表示有关数据本身或额外的一些元数据信息 如果用户无法使用这些属性,那么将这些属性放在FlowFile上就没什么用处。NiFi表达式语言提供了访问这些属性并将它们与其他值进行比较以及操作的功能 -##2.NiFi表达式的结构 +## 2.NiFi表达式的结构 NiFi表达式语言始终以起始分隔符 `${` 开头并以结束分隔符 `}` 结束。在开始和结束分隔符之间是表达式本身的文本。在最基本的形式中,表达式只包含一个属性名称。 例如, `${filename}` 将返回 `filename` 属性的值。 在稍微复杂的示例中,我们可以返回对此值的操作。例如,我们可以通过调用 `toUpper` 函数: `${filename:toUpper()}` 返回文件名的大写值。在这种情况下,我们访问 `filename` 属性,然后使用 `toUpper` 函数来操作它的值。函数调用由5个元素组成。首先,有一个函数调用分隔符 `:`。第二个是函数的名称 - 在本例中就是 `toUpper` 。接下来是一个左括号(`(`),后跟函数参数,参数必填与否取决于调用哪个函数。在这个例子中,我们使用 `toUpper` 函数,不需要任何参数,因此可忽略不填。 最后,右括号(`)`)表示函数调用的结束。表达式语言支持许多不同的功能,以实现许多不同的目标。有些函数提供String(文本)操作,例如 `toUpper` 功能。其他的, 比如 `equals` 和 `matches` 函数,提供比较功能。还有用于操纵日期和时间以及执行数学运算的函数。下面在<>部分描述了这些函数,并解释了函数的作用,它需要的参数以及它返回的信息类型。 @@ -49,7 +49,7 @@ NiFi表达式语言始终以起始分隔符 `${` 开头并以结束分隔符 `}` 通常,我们需要将两个不同属性的值相互比较。我们可以通过使用嵌入式表达式来实现这一目标。例如,我们可以检查一下 `filename` 属性与 `UUID` 属性是否相同: `${filename:equals( ${uuid} )}`。另请注意,我们在括号里面有一个空格,在 `equals` 方法和嵌入式表达式之间。这不是必需的,也不会影响以任何验证表达式的方法。它旨在使表达更容易阅读。分隔符之间的表达式语言忽略空格。因此,我们可以使用表达式 `$ {filename:equals($ {uuid})}` 或者 `$ {filename:equals($ {uuid})}` 两个表达式表达相同意思。但是,我们不能使用 `${file name:equals(${uuid})}`,因为这将导致在 `file` 和 `name` 被视作不同的属性, 而不是单个属性 `filename`。 -###2.1表达式语言的层次结构 +### 2.1表达式语言的层次结构 当使用表达式语言按名称引用属性时,NiFi 将按照规定好的层次结构搜索属性值的定义。 NiFi中当前属性匹配的层次结构如下: 1. 在 FlowFile 中搜索属性/键 @@ -60,7 +60,7 @@ NiFi中当前属性匹配的层次结构如下: NiFi 将搜索并返回匹配属性第一次出现的值。如果没有找到匹配的属性,则返回null -##3.应用程序中的表达式语言 +## 3.应用程序中的表达式语言 表达式语言在整个 NiFi 应用程序中被大量使用,用于配置组件属性。但是,并非所有组件属性都支持表达式语言。属性是否支持表达式语言由组件的开发者在组件开发时就确定好了。但是,该应用程序应该清楚地说明每个属性是否支持表达式语言。 在应用程序中,配置组件属性时,用户界面上的属性名称旁边会提供一个信息图标( Info )。将鼠标悬停在此图标上将显示提示,提供有关该属性的有用信息。此信息包括属性的描述,默认值(如果有),历史配置值(如果有)以及此属性的表达式语言的取值范围。有三个值,分别是:NONE →VARIABLE_REGISTRY → FLOWFILE_ATTRIBUTES。