Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›ES|QL ›ES|QL справка

Команды ES|QL

Команды источника

Команда источника ES|QL создает таблицу, обычно с данными из Elasticsearch. Запрос ES|QL должен начинаться с команды источника.

A source command producing a table from Elasticsearch

ES|QL поддерживает следующие команды источника:

  • FROM
  • ROW
  • SHOW

Команды обработки

Команды обработки ES|QL изменяют входную таблицу, добавляя, удаляя или изменяя строки и столбцы.

A processing command changing an input table

ES|QL поддерживает следующие команды обработки:

  • DISSECT
  • DROP
  • ENRICH
  • EVAL
  • GROK
  • KEEP
  • LIMIT
  • [предварительный просмотр] Данная функциональность находится в стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA. MV_EXPAND
  • RENAME
  • SORT
  • STATS
  • WHERE

FROM

Команда источника FROM возвращает таблицу с данными из потока данных, индекса или псевдонима.

Синтаксис

FROM index_pattern [METADATA fields]

Параметры

index_pattern
Список индексов, потоков данных или псевдонимов. Поддерживаются подстановочные знаки и математика дат.
fields
Список полей метаданных, разделенных запятыми, для извлечения.

Описание

Команда источника FROM возвращает таблицу с данными из потока данных, индекса или псевдонима. Каждая строка в результирующей таблице представляет документ. Каждый столбец соответствует полю и может быть обращен по имени этого поля.

По умолчанию запрос ES|QL без явного использования LIMIT использует неявное ограничение в 1000. Это относится и к FROM. Команда FROM без LIMIT:

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 создает строку с одним или несколькими столбцами, значения которых вы указываете. Это может быть полезно для тестирования.

Синтаксис

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 выводит столбцы строк типа keyword. Для преобразования в другой тип используйте функции преобразования типов:

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

некоторые текст

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

Английский

Чтобы использовать колонку с другим именем, чем match_field, определенное в политике, в качестве поля соответствия, используйте ON <column-name>:

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

1

Английский

По умолчанию каждое из определенных в политике полей обогащения добавляется как колонка. Для явного выбора полей обогащения, которые добавляются, используйте WITH <field1>, <field2>, ...:

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

1

Английский

Можно переименовать добавляемые колонки, используя WITH new_name=<field1>:

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

1

Английский

В случае коллизии имен, новые колонки переопределяют существующие.

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

Георги

Фачелло

2.03

6.66043

Бецалель

Симмель

2.08

6.82448

Парто

Бэмфорд

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 some.email@foo.com 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

some.email@foo.com

42

По умолчанию GROK выводит столбцы строк типа keyword. int и float типы можно преобразовать, добавив :type к семантике в шаблоне. Например, {NUMBER:num:int}:

ROW a = "2023-01-23T12:15:00.000Z 127.0.0.1 some.email@foo.com 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

some.email@foo.com

42

Для других преобразований типов используйте функции преобразования типов:

ROW a = "2023-01-23T12:15:00.000Z 127.0.0.1 some.email@foo.com 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

some.email@foo.com

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

Амстердам

1016 ED

["1016", "ED"]

Сан-Франциско

CA 94108

["CA", "94108"]

Токио

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

Георги

Фачелло

2.03

10002

Бецалель

Симмель

2.08

10003

Парто

Бэмфорд

1.83

10004

Хрис

Коблик

1.78

10005

Киоичи

Малиняк

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 позволяет ограничить количество возвращаемых строк. Запросы не возвращают более 10 000 строк, независимо от значения команды LIMIT.

Это ограничение применяется только к количеству строк, извлекаемых запросом. Запросы и агрегации выполняются на полном наборе данных.

Чтобы обойти это ограничение:

  • Уменьшите размер набора результатов, изменив запрос, чтобы он возвращал только релевантные данные. Используйте 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 будет работать над устранением любых проблем, но функции технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.

Команда обработки 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 сортирует таблицу по одному или нескольким столбцам.

По умолчанию сортировка выполняется по возрастанию. Используйте ASC или DESC для задания явного порядка сортировки.

Две строки с одинаковым ключом сортировки считаются равными. Вы можете предоставить дополнительные выражения сортировки для разрыва ничьих.

Сортировка по многозначным столбцам использует самое низкое значение при сортировке по возрастанию и самое высокое значение при сортировке по убыванию.

По умолчанию значения null считаются большими, чем любые другие. При сортировке по возрастанию значения null будут отсортированы последними, а при сортировке по убыванию — первыми. Вы можете изменить это, указав NULLS FIRST или NULLS 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

Сортировка значений null вначале с помощью NULLS FIRST:

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 опущено, выходная таблица содержит ровно одну строку с агрегациями, применёнными к всему набору данных.

Поддерживаются следующие функции агрегирования:

  • AVG
  • COUNT
  • COUNT_DISTINCT
  • MAX
  • MEDIAN
  • MEDIAN_ABSOLUTE_DEVIATION
  • MIN
  • PERCENTILE
  • [preview] Данная функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих версиях. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA. ST_CENTROID_AGG
  • SUM
  • TOP
  • VALUES
  • WEIGHTED_AVG

Поддерживаются следующие функции группировки:

  • BUCKET

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:integer

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:double

1.3904535865

Пример группировки по выражению — группировка сотрудников по первой букве их фамилии:

FROM employees
| STATS my_count = COUNT() BY LEFT(last_name, 1)
| SORT `LEFT(last_name, 1)`
my_count:long LEFT(last_name, 1):keyword

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):double

48248.55

Поскольку это имя содержит специальные символы, его необходимо заключить в кавычки с обратными апострофами (`) при использовании его в последующих командах:

FROM employees
| STATS AVG(salary)
| EVAL avg_salary_rounded = ROUND(`AVG(salary)`)
AVG(salary):double avg_salary_rounded:double

48248.55

48249.0

WHERE

Команда обработки WHERE создаёт таблицу, которая содержит все строки из входной таблицы, для которых заданное условие вычисляется как true.

Синтаксис

WHERE expression

Параметры

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 NULL и IS 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):long

84

Используйте LIKE для фильтрации данных по шаблонам строк с подстановочными знаками. LIKE обычно действует на поле, расположенном слева от оператора, но также может действовать на константное (литеральное) выражение. Правая часть оператора представляет шаблон.

Поддерживаются следующие символы подстановки:

  • * соответствует нулю или более символам.
  • ? соответствует одному символу.

Поддерживаемые типы

str pattern result

keyword

keyword

boolean

text

text

boolean

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 обычно действует на поле, расположенном слева от оператора, но также может действовать на константное (литеральное) выражение. Правая часть оператора представляет шаблон.

Поддерживаемые типы

str pattern result

ключевое слово

ключевое слово

булево

текст

текст

булево

FROM employees
| WHERE first_name RLIKE """.leja.*"""
| KEEP first_name, last_name
first_name:ключевое слово last_name:ключевое слово

Алехандро

МакАлпин

Сопоставление специальных символов (например, ., *, (…) потребует экранирования. Символом экранирования является обратный слэш \. Поскольку обратный слэш также является специальным символом в строковых литералах, он также потребует дополнительного экранирования.

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:целое число b:целое число c:целое число

1

4

3

Полный список всех операторов см. в разделе Операторы.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/esql-commands.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API