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 |