eval

eval 命令用于计算指定的表达式,并将计算结果追加到搜索结果中。

注意: eval 命令不会被重写为查询领域特定语言 (DSL)。它仅在协调节点上执行。

语法

eval 命令的语法如下:

eval <field>=<expression> ["," <field>=<expression> ]...

参数

eval 命令支持以下参数。

参数 必需/可选 描述
<field> 必需 要创建或更新的字段名称。如果字段不存在,则添加一个新字段;如果已存在,则覆盖其值。
<expression> 必需 要计算的表达式。

示例 1:创建新字段

以下查询为每个文档创建一个新的 doubleAge 字段:

source=accounts
| eval doubleAge = age * 2
| fields age, doubleAge

查询返回以下结果:

age doubleAge
32 64
36 72
28 56
33 66

示例 2:覆盖现有字段

以下查询通过给 age 字段的值加 1 来覆盖它:

source=accounts
| eval age = age + 1
| fields age

查询返回以下结果:

age
33
37
29
34

示例 3:使用 eval 中定义的字段创建新字段

以下查询基于同一个 eval 表达式中定义的另一个字段来创建新字段。在此示例中,新的 ddAge 字段是通过将 doubleAge 字段乘以 2 来计算的。而 doubleAge 字段本身是在 eval 命令的前面部分定义的:

source=accounts
| eval doubleAge = age * 2, ddAge = doubleAge * 2
| fields age, doubleAge, ddAge

查询返回以下结果:

age doubleAge ddAge
32 64 128
36 72 144
28 56 112
33 66 132

示例 4:字符串拼接

以下查询使用 concat 运算符进行字符串拼接。您可以拼接字符串字面量和字段值,如下所示:

source=accounts
| eval greeting = concat('Hello ', firstname)
| fields firstname, greeting

查询返回以下结果:

firstname greeting
Amber Hello Amber
Hattie Hello Hattie
Nanette Hello Nanette
Dale Hello Dale

示例 5:包含类型转换的多个字符串拼接

以下查询执行多个拼接操作,包括将数值类型转换为字符串:

source=accounts
| eval full_info = concat('Name: ', firstname, ', Age: ', CAST(age AS STRING))
| fields firstname, age, full_info

查询返回以下结果:

firstname age full_info
Amber 32 Name: Amber, Age: 32
Hattie 36 Name: Hattie, Age: 36
Nanette 28 Name: Nanette, Age: 28
Dale 33 Name: Dale, Age: 33