ES|QL 命令

编辑

源命令

编辑

ES|QL 源命令生成一个表格,通常包含来自 Elasticsearch 的数据。ES|QL 查询必须以源命令开始。

A source command producing a table from Elasticsearch

ES|QL 支持以下源命令

处理命令

编辑

ES|QL 处理命令通过添加、删除或更改行和列来更改输入表格。

A processing command changing an input table

ES|QL 支持以下处理命令

FROM

编辑

FROM 源命令返回一个包含来自数据流、索引或别名的数据的表格。

语法

FROM index_pattern [METADATA fields]

参数

index_pattern
索引、数据流或别名的列表。支持通配符和日期数学。
fields
要检索的元数据字段的逗号分隔列表。

描述

FROM 源命令返回一个包含来自数据流、索引或别名的数据的表格。结果表中的每一行代表一个文档。每一列对应一个字段,并且可以通过该字段的名称访问。

默认情况下,没有显式LIMIT 的 ES|QL 查询使用 1000 的隐式限制。这也适用于 FROM。没有 LIMITFROM 命令

FROM employees

执行方式如下

FROM employees
| LIMIT 1000

示例

FROM employees

您可以使用日期数学来引用索引、别名和数据流。这对于时间序列数据很有用,例如访问今天的索引

FROM <logs-{now/d}>

使用逗号分隔的列表或通配符来查询多个数据流、索引或别名

FROM employees-00001,other-employees-*

使用 <remote_cluster_name>:<target> 格式来查询远程集群上的数据流和索引

FROM cluster_one:employees-00001,cluster_two:other-employees-*

使用可选的 METADATA 指令来启用元数据字段

FROM employees METADATA _id

使用双引号 (") 或三个双引号 (""") 来转义包含特殊字符的索引名称

FROM "this=that", """this[that"""

ROW 源命令生成一个包含您指定的一个或多个带值的列的行。这对于测试非常有用。

语法

ROW column1 = value1[, ..., columnN = valueN]

参数

columnX
列名。如果存在重复的列名,则只有最右边的重复项会创建一个列。
valueX
列的值。可以是字面量、表达式或函数

示例

ROW a = 1, b = "two", c = null
a:integer b:keyword c:null

1

"two"

null

使用方括号创建多值列

ROW a = [2, 1]

ROW 支持使用函数

ROW a = ROUND(1.23, 0)

SHOW

编辑

SHOW 源命令返回有关部署及其功能的信息。

语法

SHOW item

参数

item
只能是 INFO

示例

使用 SHOW INFO 返回部署的版本、构建日期和哈希值。

SHOW INFO
version date hash

8.13.0

2024-02-23T10:04:18.123117961Z

04ba8c8db2507501c88f215e475de7b0798cb3b3

DISSECT

编辑

DISSECT 使您能够从字符串中提取结构化数据

语法

DISSECT input "pattern" [APPEND_SEPARATOR="<separator>"]

参数

input
包含您要构建结构的字符串的列。如果该列有多个值,DISSECT 将处理每个值。
pattern
Dissect 模式。如果字段名称与现有列冲突,则会删除现有列。如果一个字段名使用多次,则只有最右边的重复项会创建一个列。
<separator>
一个字符串,用作在使用追加修饰符时,附加值之间的分隔符。

描述

DISSECT 使您能够从字符串中提取结构化数据DISSECT 将字符串与基于分隔符的模式进行匹配,并将指定的键提取为列。

有关 dissect 模式的语法,请参阅使用 DISSECT 处理数据

示例

以下示例解析包含时间戳、一些文本和一个 IP 地址的字符串

ROW a = "2023-01-23T12:15:00.000Z - some text - 127.0.0.1"
| DISSECT a """%{date} - %{msg} - %{ip}"""
| KEEP date, msg, ip
date:keyword msg:keyword ip:keyword

2023-01-23T12:15:00.000Z

some text

127.0.0.1

默认情况下,DISSECT 输出关键字字符串列。要转换为其他类型,请使用类型转换函数

ROW a = "2023-01-23T12:15:00.000Z - some text - 127.0.0.1"
| DISSECT a """%{date} - %{msg} - %{ip}"""
| KEEP date, msg, ip
| EVAL date = TO_DATETIME(date)
msg:keyword ip:keyword date:date

some text

127.0.0.1

2023-01-23T12:15:00.000Z

DROP

编辑

DROP 处理命令删除一个或多个列。

语法

DROP columns

参数

columns
要删除的列的逗号分隔列表。支持通配符。

示例

FROM employees
| DROP height

您可以使用通配符删除名称与模式匹配的所有列,而不是按名称指定每一列

FROM employees
| DROP height*

ENRICH

编辑

ENRICH 使您能够使用充实策略将现有索引中的数据添加为新列。

语法

ENRICH policy [ON match_field] [WITH [new_name1 = ]field1, [new_name2 = ]field2, ...]

参数

policy
充实策略的名称。您需要先创建执行充实策略。
mode
跨集群 ES|QL 中充实命令的模式。请参阅跨集群进行充实
match_field
匹配字段。ENRICH 使用它的值在充实索引中查找记录。如果未指定,则将在名称与充实策略中定义的match_field相同的列上执行匹配。
fieldX
从充实索引添加到结果作为新列的充实字段。如果已存在与充实字段同名的列,则现有列将被新列替换。如果未指定,则会添加策略中定义的每个充实字段。除非重命名充实字段,否则将删除与充实字段同名的列。
new_nameX
使您能够更改为每个充实字段添加的列的名称。默认为充实字段名称。如果列具有与新名称相同的名称,则会将其丢弃。如果一个名称(新名称或原始名称)多次出现,则只有最右边的重复项会创建一个新列。

描述

ENRICH 使您能够使用充实策略将现有索引中的数据添加为新列。有关设置策略的信息,请参阅数据充实

esql enrich

在使用 ENRICH 之前,您需要创建并执行充实策略

示例

以下示例使用 languages_policy 充实策略来为策略中定义的每个充实字段添加一个新列。匹配是使用充实策略中定义的 match_field 执行的,并且要求输入表具有一个与其名称相同的列(本示例中为 language_code)。ENRICH 将根据匹配字段值在充实索引中查找记录。

ROW language_code = "1"
| ENRICH languages_policy
language_code:keyword language_name:keyword

1

English

要使用与策略中定义的 match_field 名称不同的列作为匹配字段,请使用 ON <column-name>

ROW a = "1"
| ENRICH languages_policy ON a
a:keyword language_name:keyword

1

English

默认情况下,策略中定义的每个充实字段都将添加为一列。要显式选择要添加的充实字段,请使用 WITH <field1>, <field2>, ...

ROW a = "1"
| ENRICH languages_policy ON a WITH language_name
a:keyword language_name:keyword

1

English

您可以使用 WITH new_name=<field1> 重命名添加的列

ROW a = "1"
| ENRICH languages_policy ON a WITH name = language_name
a:keyword name:keyword

1

English

如果发生名称冲突,新创建的列将覆盖现有列。

EVAL

编辑

EVAL 处理命令使您能够追加具有计算值的新列。

语法

EVAL [column1 =] value1[, ..., [columnN =] valueN]

参数

columnX
列名。如果已存在与该名称相同的列,则会删除现有列。如果一个列名使用多次,则只有最右边的重复项会创建一个列。
valueX
列的值。可以是字面量、表达式或函数。可以使用定义在其左侧的列。

描述

EVAL 处理命令使您能够追加具有计算值的新列。EVAL 支持用于计算值的各种函数。有关更多信息,请参阅函数

示例

FROM employees
| SORT emp_no
| KEEP first_name, last_name, height
| EVAL height_feet = height * 3.281, height_cm = height * 100
first_name:keyword last_name:keyword height:double height_feet:double height_cm:double

Georgi

Facello

2.03

6.66043

202.99999999999997

Bezalel

Simmel

2.08

6.82448

208.0

Parto

Bamford

1.83

6.004230000000001

183.0

如果指定的列已存在,则会删除现有列,并将新列附加到表中

FROM employees
| SORT emp_no
| KEEP first_name, last_name, height
| EVAL height = height * 3.281
first_name:keyword last_name:keyword height:double

Georgi

Facello

6.66043

Bezalel

Simmel

6.82448

Parto

Bamford

6.004230000000001

指定输出列名是可选的。如果未指定,则新列名等于表达式。以下查询添加一个名为 height*3.281 的列

FROM employees
| SORT emp_no
| KEEP first_name, last_name, height
| EVAL height * 3.281
first_name:keyword last_name:keyword height:double height * 3.281:double

Georgi

Facello

2.03

6.66043

Bezalel

Simmel

2.08

6.82448

Parto

Bamford

1.83

6.004230000000001

由于此名称包含特殊字符,因此在后续命令中使用时需要用反引号 (`) 引起来

FROM employees
| EVAL height * 3.281
| STATS avg_height_feet = AVG(`height * 3.281`)
avg_height_feet:double

5.801464200000001

GROK

编辑

GROK 使您能够从字符串中提取结构化数据

语法

GROK input "pattern"

参数

input
包含要结构化的字符串的列。如果列具有多个值,则 GROK 将处理每个值。
pattern
一个 grok 模式。如果字段名称与现有列冲突,则会丢弃现有列。如果一个字段名称被多次使用,则会创建一个多值列,每个字段名称的出现都会有一个值。

描述

GROK 使您能够从字符串中提取结构化数据GROK 基于正则表达式将字符串与模式匹配,并将指定的模式提取为列。

有关 grok 模式的语法,请参阅使用 GROK 处理数据

示例

以下示例解析包含时间戳、IP 地址、电子邮件地址和数字的字符串

ROW a = "2023-01-23T12:15:00.000Z 127.0.0.1 [email protected] 42"
| GROK a """%{TIMESTAMP_ISO8601:date} %{IP:ip} %{EMAILADDRESS:email} %{NUMBER:num}"""
| KEEP date, ip, email, num
date:keyword ip:keyword email:keyword num:keyword

2023-01-23T12:15:00.000Z

127.0.0.1

[email protected]

42

默认情况下,GROK 输出关键字字符串列。intfloat 类型可以通过在模式中的语义后面附加 :type 来进行转换。例如 {NUMBER:num:int}

ROW a = "2023-01-23T12:15:00.000Z 127.0.0.1 [email protected] 42"
| GROK a """%{TIMESTAMP_ISO8601:date} %{IP:ip} %{EMAILADDRESS:email} %{NUMBER:num:int}"""
| KEEP date, ip, email, num
date:keyword ip:keyword email:keyword num:integer

2023-01-23T12:15:00.000Z

127.0.0.1

[email protected]

42

对于其他类型转换,请使用类型转换函数

ROW a = "2023-01-23T12:15:00.000Z 127.0.0.1 [email protected] 42"
| GROK a """%{TIMESTAMP_ISO8601:date} %{IP:ip} %{EMAILADDRESS:email} %{NUMBER:num:int}"""
| KEEP date, ip, email, num
| EVAL date = TO_DATETIME(date)
ip:keyword email:keyword num:integer date:date

127.0.0.1

[email protected]

42

2023-01-23T12:15:00.000Z

如果一个字段名称被多次使用,GROK 会创建一个多值列

FROM addresses
| KEEP city.name, zip_code
| GROK zip_code """%{WORD:zip_parts} %{WORD:zip_parts}"""
city.name:keyword zip_code:keyword zip_parts:keyword

Amsterdam

1016 ED

["1016", "ED"]

San Francisco

CA 94108

["CA", "94108"]

Tokyo

100-7014

null

KEEP

编辑

KEEP 处理命令允许您指定要返回的列以及返回的顺序。

语法

KEEP columns

参数

columns
要保留的列的逗号分隔列表。支持通配符。请参阅下文,了解现有列与多个给定通配符或列名匹配时的行为。

描述

KEEP 处理命令允许您指定要返回的列以及返回的顺序。

当一个字段名称与多个表达式匹配时,将应用优先级规则。字段按照它们出现的顺序添加。如果一个字段与多个表达式匹配,则应用以下优先级规则(从最高到最低优先级):

  1. 完整字段名称(无通配符)
  2. 部分通配符表达式(例如:fieldNam*
  3. 仅通配符 (*)

如果一个字段与两个具有相同优先级的表达式匹配,则最右边的表达式胜出。

有关这些优先级规则的说明,请参阅示例。

示例

列将按指定的顺序返回

FROM employees
| KEEP emp_no, first_name, last_name, height
emp_no:integer first_name:keyword last_name:keyword height:double

10001

Georgi

Facello

2.03

10002

Bezalel

Simmel

2.08

10003

Parto

Bamford

1.83

10004

Chirstian

Koblick

1.78

10005

Kyoichi

Maliniak

2.05

您可以使用通配符返回所有名称与模式匹配的列,而无需按名称指定每个列

FROM employees
| KEEP h*
height:double height.float:double height.half_float:double height.scaled_float:double hire_date:date

星号通配符 (*) 本身转换为所有与其它参数不匹配的列。

此查询将首先返回所有名称以 h 开头的列,然后返回所有其他列

FROM employees
| KEEP h*, *
height:double height.float:double height.half_float:double height.scaled_float:double hire_date:date avg_worked_seconds:long birth_date:date emp_no:integer first_name:keyword gender:keyword is_rehired:boolean job_positions:keyword languages:integer languages.byte:integer languages.long:long languages.short:integer last_name:keyword salary:integer salary_change:double salary_change.int:integer salary_change.keyword:keyword salary_change.long:long still_hired:boolean

以下示例显示当一个字段名称与多个表达式匹配时,优先级规则如何工作。

完整字段名称的优先级高于通配符表达式

FROM employees
| KEEP first_name, last_name, first_name*
first_name:keyword last_name:keyword

通配符表达式具有相同的优先级,但最后一个胜出(尽管不太具体)

FROM employees
| KEEP first_name*, last_name, first_na*
last_name:keyword first_name:keyword

简单的通配符表达式 * 具有最低优先级。输出顺序由其他参数确定

FROM employees
| KEEP *, first_name
avg_worked_seconds:long birth_date:date emp_no:integer gender:keyword height:double height.float:double height.half_float:double height.scaled_float:double hire_date:date is_rehired:boolean job_positions:keyword languages:integer languages.byte:integer languages.long:long languages.short:integer last_name:keyword salary:integer salary_change:double salary_change.int:integer salary_change.keyword:keyword salary_change.long:long still_hired:boolean first_name:keyword

LIMIT

编辑

LIMIT 处理命令允许您限制返回的行数。

语法

LIMIT max_number_of_rows

参数

max_number_of_rows
要返回的最大行数。

描述

LIMIT 处理命令允许您限制返回的行数。无论 LIMIT 命令的值如何,查询返回的行数都不会超过 10,000 行。

此限制仅适用于查询检索的行数。查询和聚合在完整数据集上运行。

要克服此限制

  • 通过修改查询以仅返回相关数据来减小结果集大小。使用WHERE选择较小的数据子集。
  • 将任何查询后处理转移到查询本身。您可以使用 ES|QL STATS 命令在查询中聚合数据。

可以使用以下动态集群设置更改默认限制和最大限制

  • esql.query.result_truncation_default_size
  • esql.query.result_truncation_max_size

示例

FROM employees
| SORT emp_no ASC
| LIMIT 5

MV_EXPAND

编辑

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览中的功能不受官方 GA 功能的支持 SLA 约束。

MV_EXPAND 处理命令将多值列展开为每值一行,复制其他列。

语法

MV_EXPAND column

参数

column
要展开的多值列。

示例

ROW a=[1,2,3], b="b", j=["a","b"]
| MV_EXPAND a
a:integer b:keyword j:keyword

1

b

["a", "b"]

2

b

["a", "b"]

3

b

["a", "b"]

RENAME

编辑

RENAME 处理命令重命名一个或多个列。

语法

RENAME old_name1 AS new_name1[, ..., old_nameN AS new_nameN]

参数

old_nameX
您要重命名的列的名称。
new_nameX
列的新名称。如果它与现有列名冲突,则会删除现有列。如果多个列被重命名为相同的名称,则会删除除最右侧具有相同新名称的列之外的所有列。

描述

RENAME 处理命令重命名一个或多个列。如果已存在具有新名称的列,则它将被新列替换。

示例

FROM employees
| KEEP first_name, last_name, still_hired
| RENAME  still_hired AS employed

可以使用单个 RENAME 命令重命名多个列

FROM employees
| KEEP first_name, last_name
| RENAME first_name AS fn, last_name AS ln

SORT

编辑

SORT 处理命令根据一个或多个列对表进行排序。

语法

SORT column1 [ASC/DESC][NULLS FIRST/NULLS LAST][, ..., columnN [ASC/DESC][NULLS FIRST/NULLS LAST]]

参数

columnX
要排序的列。

描述

SORT 处理命令根据一个或多个列对表进行排序。

默认排序顺序为升序。使用 ASCDESC 指定显式排序顺序。

具有相同排序键的两行被认为是相等的。您可以提供额外的排序表达式来作为平局打破器。

在多值列上排序时,升序排序时使用最小值,降序排序时使用最大值。

默认情况下,null 值被视为大于任何其他值。使用升序排序顺序,null 值将排在最后,而使用降序排序顺序,null 值将排在最前面。您可以通过提供 NULLS FIRSTNULLS LAST 来更改此行为。

示例

FROM employees
| KEEP first_name, last_name, height
| SORT height

使用 ASC 显式按升序排序

FROM employees
| KEEP first_name, last_name, height
| SORT height DESC

提供额外的排序表达式来作为平局打破器

FROM employees
| KEEP first_name, last_name, height
| SORT height DESC, first_name ASC

使用 NULLS FIRST 首先排序 null

FROM employees
| KEEP first_name, last_name, height
| SORT first_name ASC NULLS FIRST

STATS

编辑

STATS 处理命令根据公共值对行进行分组,并计算分组行的一个或多个聚合值。

语法

STATS [column1 =] expression1 [WHERE boolean_expression1][,
      ...,
      [columnN =] expressionN [WHERE boolean_expressionN]]
      [BY grouping_expression1[, ..., grouping_expressionN]]

参数

columnX
聚合值返回的名称。如果省略,则名称等于相应的表达式 (expressionX)。如果多个列具有相同的名称,则会忽略除最右侧具有此名称的列之外的所有列。
expressionX
计算聚合值的表达式。
grouping_expressionX
输出要分组的值的表达式。如果其名称与计算列之一重合,则会忽略该列。
boolean_expressionX
一行要包含在 expressionX 的评估中必须满足的条件。

计算聚合时会跳过单独的 null 值。

描述

STATS 处理命令根据公共值对行进行分组,并计算分组行的一个或多个聚合值。对于每个聚合值的计算,可以使用 WHERE 过滤组中的行。如果省略 BY,则输出表将只包含一行,其中包含应用于整个数据集的聚合。

支持以下聚合函数

支持以下分组函数

不带任何组的 STATS 比添加组快得多。

对单个表达式进行分组比对多个表达式进行分组要优化得多。在某些测试中,我们发现对单个 keyword 列进行分组比对两个 keyword 列进行分组快五倍。不要尝试通过使用诸如 CONCAT 之类的方式将两列组合在一起然后进行分组来解决此问题 - 这不会更快。

示例

计算统计信息并按另一列的值进行分组

FROM employees
| STATS count = COUNT(emp_no) BY languages
| SORT languages
count:long languages:integer

15

1

19

2

17

3

18

4

21

5

10

null

省略 BY 将返回一行,其中包含应用于整个数据集的聚合

FROM employees
| STATS avg_lang = AVG(languages)
avg_lang:double

3.1222222222222222

可以计算多个值

FROM employees
| STATS avg_lang = AVG(languages), max_lang = MAX(languages)
avg_lang:double max_lang:integer

3.1222222222222222

5

要筛选进入聚合的行,请使用 WHERE 子句

FROM employees
| STATS avg50s = AVG(salary)::LONG WHERE birth_date < "1960-01-01",
        avg60s = AVG(salary)::LONG WHERE birth_date >= "1960-01-01"
        BY gender
| SORT gender
avg50s:long avg60s:long gender:keyword

55462

46637

F

48279

44879

M

聚合可以混合使用,可以有或没有过滤器,并且分组也是可选的

FROM employees
| EVAL Ks = salary / 1000 // thousands
| STATS under_40K = COUNT(*) WHERE Ks < 40,
        inbetween = COUNT(*) WHERE 40 <= Ks AND Ks < 60,
        over_60K  = COUNT(*) WHERE 60 <= Ks,
        total     = COUNT(*)
under_40K:long inbetween:long over_60K:long total:long

36

39

25

100

如果分组键是多值的,则输入行在所有组中

ROW i=1, a=["a", "b"] | STATS MIN(i) BY a | SORT a ASC
MIN(i):integer a:keyword

1

a

1

b

也可以按多个值进行分组

FROM employees
| EVAL hired = DATE_FORMAT("yyyy", hire_date)
| STATS avg_salary = AVG(salary) BY hired, languages.long
| EVAL avg_salary = ROUND(avg_salary)
| SORT hired, languages.long

如果所有分组键都是多值的,则输入行会出现在所有组中

ROW i=1, a=["a", "b"], b=[2, 3] | STATS MIN(i) BY a, b | SORT a ASC, b ASC
MIN(i):integer a:keyword b:整数

1

a

2

1

a

3

1

b

2

1

b

3

聚合函数和分组表达式都接受其他函数。这对于在多值列上使用 STATS 非常有用。例如,要计算平均工资变化,可以使用 MV_AVG 先计算每位员工的多个值的平均值,然后将结果与 AVG 函数一起使用

FROM employees
| STATS avg_salary_change = ROUND(AVG(MV_AVG(salary_change)), 10)
avg_salary_change:双精度浮点数

1.3904535865

按表达式分组的一个示例是按员工姓氏的首字母对员工进行分组

FROM employees
| STATS my_count = COUNT() BY LEFT(last_name, 1)
| SORT `LEFT(last_name, 1)`
my_count:长整数 LEFT(last_name, 1):关键词

2

A

11

B

5

C

5

D

2

E

4

F

4

G

6

H

2

J

3

K

5

L

12

M

4

N

1

O

7

P

5

R

13

S

4

T

2

W

3

Z

指定输出列名是可选的。如果未指定,则新列名与表达式相同。以下查询返回一个名为 AVG(salary) 的列

FROM employees
| STATS AVG(salary)
AVG(salary):双精度浮点数

48248.55

由于此名称包含特殊字符,因此在后续命令中使用时需要用反引号 (`) 引起来

FROM employees
| STATS AVG(salary)
| EVAL avg_salary_rounded = ROUND(`AVG(salary)`)
AVG(salary):双精度浮点数 avg_salary_rounded:双精度浮点数

48248.55

48249.0

WHERE

编辑

WHERE 处理命令生成一个表,其中包含输入表中所有满足所提供条件的行的记录。

语法

WHERE expression

参数

表达式
一个布尔表达式。

示例

FROM employees
| KEEP first_name, last_name, still_hired
| WHERE still_hired == true

如果 still_hired 是一个布尔字段,则可以简化为

FROM employees
| KEEP first_name, last_name, still_hired
| WHERE still_hired

使用日期数学从特定时间范围检索数据。例如,要检索最近一小时的日志

FROM sample_data
| WHERE @timestamp > NOW() - 1 hour

WHERE 支持各种函数。例如,LENGTH 函数

FROM employees
| KEEP first_name, last_name, height
| WHERE LENGTH(first_name) < 4

有关所有函数的完整列表,请参阅函数概述

对于 NULL 比较,请使用 IS NULLIS NOT NULL 谓词

FROM employees
| WHERE birth_date IS NULL
| KEEP first_name, last_name
| SORT first_name
| LIMIT 3
first_name:keyword last_name:keyword

Basil

Tramer

Florian

Syrotiuk

Lucien

Rosenbaum

FROM employees
| WHERE is_rehired IS NOT NULL
| STATS COUNT(emp_no)
COUNT(emp_no):长整数

84

使用 LIKE 通过通配符根据字符串模式筛选数据。LIKE 通常作用于运算符左侧的字段,但也可以作用于常量(字面量)表达式。运算符的右侧表示模式。

支持以下通配符

  • * 匹配零个或多个字符。
  • ? 匹配一个字符。

支持的类型

字符串 pattern 结果

关键词

关键词

布尔值

文本

文本

布尔值

FROM employees
| WHERE first_name LIKE """?b*"""
| KEEP first_name, last_name
first_name:keyword last_name:keyword

Ebbe

Callaway

Eberhardt

Terkki

匹配 *. 等确切字符将需要转义。转义字符是反斜杠 \。由于反斜杠也是字符串字面量中的特殊字符,因此需要进一步转义。

ROW message = "foo * bar"
| WHERE message LIKE "foo \\* bar"

为了减少转义的开销,我们建议使用三引号字符串 """

ROW message = "foo * bar"
| WHERE message LIKE """foo \* bar"""

使用 RLIKE 通过 正则表达式根据字符串模式筛选数据。RLIKE 通常作用于运算符左侧的字段,但也可以作用于常量(字面量)表达式。运算符的右侧表示模式。

支持的类型

字符串 pattern 结果

关键词

关键词

布尔值

文本

文本

布尔值

FROM employees
| WHERE first_name RLIKE """.leja.*"""
| KEEP first_name, last_name
first_name:keyword last_name:keyword

Alejandro

McAlpine

匹配特殊字符(例如 ., *, (…​)将需要转义。转义字符是反斜杠 \。由于反斜杠也是字符串字面量中的特殊字符,因此需要进一步转义。

ROW message = "foo ( bar"
| WHERE message RLIKE "foo \\( bar"

为了减少转义的开销,我们建议使用三引号字符串 """

ROW message = "foo ( bar"
| WHERE message RLIKE """foo \( bar"""

IN 运算符允许测试字段或表达式是否等于字面量、字段或表达式列表中的一个元素

ROW a = 1, b = 4, c = 3
| WHERE c-a IN (3, b / 2, a)
a:integer b:整数 c:整数

1

4

3

有关所有运算符的完整列表,请参阅运算符