Функции и операторы ES|QL
ES|QL предоставляет полный набор функций и операторов для работы с данными. Справочная документация разделена на следующие категории:
Обзор функций
Функции агрегирования
-
AVG -
COUNT -
COUNT_DISTINCT -
MAX -
MEDIAN -
MEDIAN_ABSOLUTE_DEVIATION -
MIN -
PERCENTILE - [preview] Данная функциональность находится в предварительном техническом режиме и может быть изменена или удалена в будущих релизах. Elastic будет работать над исправлением любых проблем, но функции в предварительном техническом режиме не подпадают под SLA поддержки официальных функций GA.
ST_CENTROID_AGG -
SUM -
TOP -
VALUES -
WEIGHTED_AVG
Функции группировки
Функции дат и времени
Функции IP-адресов
Математические функции
Функции поиска
- [превью] Данная функциональность находится в стадии технического превью и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
MATCH - [превью] Данная функциональность находится в стадии технического превью и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
QSTR
Пространственные функции
Функции преобразования типов
-
TO_BOOLEAN -
TO_CARTESIANPOINT -
TO_CARTESIANSHAPE - [preview] Данная функция находится в техническом предварительном режиме и может быть изменена или удалена в будущих релизах. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном режиме не подпадают под SLA поддержки официальных функций GA.
TO_DATEPERIOD -
TO_DATETIME -
TO_DEGREES -
TO_DOUBLE -
TO_GEOPOINT -
TO_GEOSHAPE -
TO_INTEGER -
TO_IP -
TO_LONG -
TO_RADIANS -
TO_STRING - [preview] Данная функция находится в техническом предварительном режиме и может быть изменена или удалена в будущих релизах. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном режиме не подпадают под SLA поддержки официальных функций GA.
TO_TIMEDURATION - [preview] Данная функция находится в техническом предварительном режиме и может быть изменена или удалена в будущих релизах. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном режиме не подпадают под SLA поддержки официальных функций GA.
TO_UNSIGNED_LONG -
TO_VERSION
Обзор операторов
Операторы
- Бинарные операторы
- Унарные операторы
- Логические операторы
- Предикаты
IS NULLиIS NOT NULL - Оператор приведения типов (::)
- Оператор IN
- Оператор LIKE
- Оператор RLIKE
- [превью] Данная функциональность находится на стадии технического превью и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, однако функциональность на стадии технического превью не подпадает под SLA поддержки официальных функций GA. Операторы поиска
Функции агрегирования ES|QL
Команда STATS поддерживает эти функции агрегирования:
-
AVG -
COUNT -
COUNT_DISTINCT -
MAX -
MEDIAN -
MEDIAN_ABSOLUTE_DEVIATION -
MIN -
PERCENTILE - [preview] Данная функциональность находится на стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции на стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.
ST_CENTROID_AGG -
SUM -
TOP -
VALUES -
WEIGHTED_AVG
AVG
Синтаксис
Параметры
-
number
Описание
Среднее значение числового поля.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
Примеры
FROM employees | STATS AVG(height)
| AVG(height):double |
|---|
1.7682 |
Выражение может использовать встроенные функции. Например, для вычисления среднего значения по многозначному столбцу, сначала используйте MV_AVG для усреднения нескольких значений в каждой строке, а затем используйте результат с функцией AVG.
FROM employees | STATS avg_salary_change = ROUND(AVG(MV_AVG(salary_change)), 10)
| avg_salary_change:double |
|---|
1.3904535865 |
COUNT
Синтаксис
Параметры
-
field - Выражение, которое выводит значения, подлежащие подсчёту. Если опущено, эквивалентно
COUNT(*)(количеству строк).
Описание
Возвращает общее количество (счёт) входных значений.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | long |
cartesian_point | long |
date | long |
double | long |
geo_point | long |
integer | long |
ip | long |
keyword | long |
long | long |
text | long |
unsigned_long | long |
version | long |
Примеры
FROM employees | STATS COUNT(height)
| COUNT(height):long |
|---|
100 |
Для подсчёта количества строк используйте COUNT() или COUNT(*)
FROM employees | STATS count = COUNT(*) BY languages | SORT languages DESC
| count:long | languages:integer |
|---|---|
10 | null |
21 | 5 |
18 | 4 |
17 | 3 |
19 | 2 |
15 | 1 |
Выражение может использовать встроенные функции. Этот пример разбивает строку на несколько значений с помощью функции SPLIT и подсчитывает эти значения.
ROW words="foo;bar;baz;qux;quux;foo" | STATS word_count = COUNT(SPLIT(words, ";"))
| word_count:long |
|---|
6 |
Чтобы подсчитать количество раз, когда выражение возвращает TRUE, используйте команду WHERE для удаления строк, которые не должны быть включены.
ROW n=1 | WHERE n < 0 | STATS COUNT(n)
| COUNT(n):long |
|---|
0 |
Чтобы подсчитать один и тот же поток данных на основе двух разных выражений, используйте шаблон COUNT(<expression> OR NULL). Это основано на трёхзначной логике (3VL) языка: TRUE OR NULL является TRUE, но FALSE OR NULL является NULL, плюс способ, которым COUNT обрабатывает NULL`s: `COUNT(TRUE) и COUNT(FALSE) оба равны 1, но COUNT(NULL) равен 0.
ROW n=1 | STATS COUNT(n > 0 OR NULL), COUNT(n < 0 OR NULL)
| COUNT(n > 0 OR NULL):long | COUNT(n < 0 OR NULL):long |
|---|---|
1 | 0 |
COUNT_DISTINCT
Синтаксис
Параметры
-
field - Столбец или литерал, для которого необходимо подсчитать количество уникальных значений.
-
precision - Порог точности. См. Подсчёты приблизительные. Максимальное допустимое значение — 40000. Пороги выше этого значения будут иметь тот же эффект, что и порог в 40000. Значение по умолчанию — 3000.
Описание
Возвращает приблизительное количество уникальных значений.
Поддерживаемые типы
| field | precision | результат |
|---|
boolean | integer | long |
boolean | long | long |
boolean | unsigned_long | long |
boolean | long | |
date | integer | long |
date | long | long |
date | unsigned_long | long |
date | long | |
date_nanos | integer | long |
date_nanos | long | long |
date_nanos | unsigned_long | long |
date_nanos | long | |
double | integer | long |
double | long | long |
double | unsigned_long | long |
double | long | |
integer | integer | long |
integer | long | long |
integer | unsigned_long | long |
integer | long | |
ip | integer | long |
ip | long | long |
ip | unsigned_long | long |
ip | long | |
keyword | integer | long |
keyword | long | long |
keyword | unsigned_long | long |
keyword | long | |
long | integer | long |
long | long | long |
long | unsigned_long | long |
long | long | |
text | integer | long |
text | long | long |
text | unsigned_long | long |
text | long | |
version | integer | long |
версия | длинное целое число | длинное целое число |
версия | безознаковое длинное целое число | длинное целое число |
версия | длинное целое число |
Примеры
FROM hosts | STATS COUNT_DISTINCT(ip0), COUNT_DISTINCT(ip1)
| COUNT_DISTINCT(ip0):длинное целое число | COUNT_DISTINCT(ip1):длинное целое число |
|---|---|
7 | 8 |
С необязательным вторым параметром для настройки порога точности
FROM hosts | STATS COUNT_DISTINCT(ip0, 80000), COUNT_DISTINCT(ip1, 5)
| COUNT_DISTINCT(ip0, 80000):длинное целое число | COUNT_DISTINCT(ip1, 5):длинное целое число |
|---|---|
7 | 9 |
Выражение может использовать встроенные функции. В этом примере строка разделяется на несколько значений с помощью функции SPLIT, а уникальные значения подсчитываются
ROW words="foo;bar;baz;qux;quux;foo" | STATS distinct_word_count = COUNT_DISTINCT(SPLIT(words, ";"))
| distinct_word_count:длинное целое число |
|---|
5 |
Подсчёты приблизительные
Для вычисления точных подсчётов необходимо загрузить значения в множество и вернуть его размер. Это не масштабируется при работе с множествами высокой мощности и/или большими значениями, так как требуемое использование памяти и необходимость передачи множеств по фрагментам между узлами будут использовать слишком много ресурсов кластера.
Эта COUNT_DISTINCT функция основана на алгоритме HyperLogLog++, который подсчитывает значения на основе хэшей с некоторыми интересными свойствами:
- настраиваемая точность, определяющая, как изменять память на точность,
- отличная точность при работе с множествами низкой мощности,
- фиксированное использование памяти: независимо от того, десятки или миллиарды уникальных значений, использование памяти зависит только от настроенной точности.
Для порога точности c, используемая нами реализация требует около c * 8 байт.
На следующей диаграмме показано, как меняется ошибка до и после порога:
Для всех 3 порогов подсчёты были точными до настроенного порога. Хотя это не гарантируется, это, вероятно, так. Точность на практике зависит от набора данных. В целом, большинство наборов данных демонстрируют последовательно хорошую точность. Также обратите внимание, что даже при пороге в 100 ошибка остаётся очень низкой (1-6%, как видно на графике выше), даже при подсчёте миллионов элементов.
Алгоритм HyperLogLog++ зависит от ведущих нулей хэшированных значений, точные распределения хэшей в наборе данных могут влиять на точность подсчёта.
Функция COUNT_DISTINCT принимает необязательный второй параметр для настройки порога точности. Параметры precision_threshold позволяют изменять память на точность и определяет уникальный подсчёт, ниже которого ожидается, что подсчёты будут близки к точным. Выше этого значения подсчёты могут быть несколько приближёнными. Максимальное поддерживаемое значение равно 40000, значения порога выше этого числа будут иметь тот же эффект, что и пороговое значение 40000. Значение по умолчанию равно 3000.
MAX
Синтаксис
Параметры
-
field
Описание
Максимальное значение поля.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
date | date |
date_nanos | date_nanos |
double | double |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
version | version |
Примеры
FROM employees | STATS MAX(languages)
| MAX(languages):integer |
|---|
5 |
Выражение может использовать встроенные функции. Например, для вычисления максимального значения по среднему значению многозначного столбца, сначала воспользуйтесь MV_AVG для вычисления среднего значения по нескольким значениям в строке, а затем используйте результат с функцией MAX.
FROM employees | STATS max_avg_salary_change = MAX(MV_AVG(salary_change))
| max_avg_salary_change:double |
|---|
13.75 |
MEDIAN
Синтаксис
Параметры
-
number
Описание
Значение, которое больше половины всех значений и меньше половины всех значений, также известное как 50%-й PERCENTILE.
Подобно PERCENTILE, MEDIAN обычно является приближенным.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
Примеры
FROM employees | STATS MEDIAN(salary), PERCENTILE(salary, 50)
| MEDIAN(salary):double | PERCENTILE(salary, 50):double |
|---|---|
47003 | 47003 |
Выражение может использовать встроенные функции. Например, для вычисления медианы максимальных значений многозначного столбца, сначала воспользуйтесь MV_MAX для получения максимального значения в каждой строке, а затем используйте результат с функцией MEDIAN.
FROM employees | STATS median_max_salary_change = MEDIAN(MV_MAX(salary_change))
| median_max_salary_change:double |
|---|
7.69 |
MEDIAN также является недетерминированным. Это означает, что вы можете получить немного разные результаты, используя те же данные.
MEDIAN_ABSOLUTE_DEVIATION
Синтаксис
Параметры
-
number
Описание
Возвращает медианное абсолютное отклонение, показатель изменчивости. Это устойчивая статистика, что означает, что она полезна для описания данных, которые могут содержать выбросы или не подчиняться нормальному распределению. Для таких данных она может быть более информативной, чем стандартное отклонение. Она вычисляется как медиана отклонений каждого значения данных от медианы всего образца. То есть, для случайной величины X, медианное абсолютное отклонение равно median(|median(X) - X|).
Как и PERCENTILE, MEDIAN_ABSOLUTE_DEVIATION обычно является приближенным.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
Примеры
FROM employees | STATS MEDIAN(salary), MEDIAN_ABSOLUTE_DEVIATION(salary)
| MEDIAN(salary):double | MEDIAN_ABSOLUTE_DEVIATION(salary):double |
|---|---|
47003 | 10096.5 |
Выражение может использовать встроенные функции. Например, для вычисления медианного абсолютного отклонения максимальных значений многозначного столбца, сначала используйте MV_MAX для получения максимального значения в каждой строке, а затем используйте результат с функцией MEDIAN_ABSOLUTE_DEVIATION.
FROM employees | STATS m_a_d_max_salary_change = MEDIAN_ABSOLUTE_DEVIATION(MV_MAX(salary_change))
| m_a_d_max_salary_change:double |
|---|
5.69 |
MEDIAN_ABSOLUTE_DEVIATION также является недетерминированным. Это означает, что вы можете получить немного разные результаты, используя те же данные.
MIN
Синтаксис
Параметры
-
field
Описание
Минимальное значение поля.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
date | date |
date_nanos | date_nanos |
double | double |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
version | version |
Примеры
FROM employees | STATS MIN(languages)
| MIN(languages):integer |
|---|
1 |
Выражение может использовать встроенные функции. Например, для вычисления минимума по среднему значению многозначного столбца, используйте MV_AVG, чтобы сначала усреднить несколько значений в каждой строке, и используйте результат с функцией MIN.
FROM employees | STATS min_avg_salary_change = MIN(MV_AVG(salary_change))
| min_avg_salary_change:double |
|---|
-8.46 |
PERCENTILE
Синтаксис
Параметры
-
number -
percentile
Описание
Возвращает значение, при котором определённый процент наблюдаемых значений. Например, 95-й перцентиль — это значение, которое больше 95% наблюдаемых значений, а 50-й перцентиль — это MEDIAN.
Поддерживаемые типы
| число | перцентиль | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | double |
integer | long | double |
long | double | double |
long | integer | double |
long | long | double |
Примеры
FROM employees
| STATS p0 = PERCENTILE(salary, 0)
, p50 = PERCENTILE(salary, 50)
, p99 = PERCENTILE(salary, 99) | p0:double | p50:double | p99:double |
|---|---|---|
25324 | 47003 | 74970.29 |
Выражение может использовать встроенные функции. Например, для вычисления процентиля максимальных значений многозначного столбца сначала используйте MV_MAX для получения максимального значения в каждой строке, а затем используйте результат с функцией PERCENTILE
FROM employees | STATS p80_max_salary_change = PERCENTILE(MV_MAX(salary_change), 80)
| p80_max_salary_change:double |
|---|
12.132 |
PERCENTILE (обычно) приблизительно
Существует множество различных алгоритмов для вычисления процентилей. Примитивное решение просто хранит все значения в отсортированном массиве. Чтобы найти 50-й процентиль, нужно просто найти значение, находящееся на позиции my_array[count(my_array) * 0.5].
Очевидно, что простое решение не масштабируется — отсортированный массив растёт линейно с количеством значений в наборе данных. Для вычисления процентилей в потенциально миллиардах значений в кластере Elasticsearch вычисляются приблизительные процентили.
Алгоритм, используемый метрикой percentile, называется TDigest (представленный Тедом Даннингом в Computing Accurate Quantiles using T-Digests).
При использовании этой метрики следует учитывать несколько рекомендаций:
- Точность пропорциональна
q(1-q). Это означает, что крайние процентили (например, 99%) более точные, чем менее крайние процентили, такие как медиана - Для небольших наборов значений процентили очень точны (и потенциально 100% точные, если данные достаточно малы).
- По мере увеличения количества значений в корзине алгоритм начинает приближать процентили. Он фактически жертвует точностью ради экономии памяти. Точный уровень неточности трудно обобщить, так как он зависит от распределения данных и объёма агрегируемых данных
На следующем графике показана относительная ошибка на равномерном распределении в зависимости от количества собранных значений и запрашиваемого процентиля:
Он показывает, как точность лучше для крайних процентилей. Причина, по которой ошибка уменьшается при большом количестве значений, заключается в том, что закон больших чисел делает распределение значений всё более равномерным, и дерево t-digest может лучше обобщить его. Это не будет справедливо для более искажённых распределений.
PERCENTILE также является недетерминированным. Это означает, что вы можете получать немного разные результаты, используя одни и те же данные.
ST_CENTROID_AGG
Синтаксис
Параметры
-
field
Описание
Вычислить пространственный центр тяжести по полю с пространственной геометрией типа точки.
Поддерживаемые типы
| поле | результат |
|---|---|
cartesian_point | cartesian_point |
geo_point | geo_point |
Пример
FROM airports | STATS centroid=ST_CENTROID_AGG(location)
| centroid:geo_point |
|---|
POINT(-0.030548143003023033 24.37553649504829) |
SUM
Синтаксис
Параметры
-
number
Описание
Сумма числового выражения.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | long |
long | long |
Примеры
FROM employees | STATS SUM(languages)
| SUM(languages):long |
|---|
281 |
Выражение может использовать встроенные функции. Например, чтобы вычислить сумму изменений максимальной зарплаты каждого сотрудника, примените функцию MV_MAX к каждой строке, а затем просуммируйте результаты.
FROM employees | STATS total_salary_changes = SUM(MV_MAX(salary_change))
| total_salary_changes:double |
|---|
446.75 |
TOP
Синтаксис
Параметры
-
field - Поле для сбора наибольших значений.
-
limit - Максимальное количество значений для сбора.
-
order - Порядок вычисления наибольших значений. Либо
asc, либоdesc.
Описание
Сбор наибольших значений для поля. Включает повторяющиеся значения.
Поддерживаемые типы
| Поле | Предел | Порядок | Результат |
|---|---|---|---|
boolean | integer | ключевое слово | boolean |
дата | integer | ключевое слово | дата |
double | integer | ключевое слово | double |
integer | integer | ключевое слово | integer |
ip | integer | ключевое слово | ip |
ключевое слово | integer | ключевое слово | ключевое слово |
long | integer | ключевое слово | long |
текст | integer | ключевое слово | ключевое слово |
Пример
FROM employees | STATS top_salaries = TOP(salary, 3, "desc"), top_salary = MAX(salary)
| top_salaries:integer | top_salary:integer |
|---|---|
[74999, 74970, 74572] | 74999 |
VALUES
Не используйте VALUES в производственных средах. Данная функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих выпусках. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
Синтаксис
Параметры
-
field
Описание
Возвращает все значения в группе в качестве многозначного поля. Порядок возвращаемых значений не гарантируется. Если вам нужны значения, возвращаемые в порядке, используйте MV_SORT.
Поддерживаемые типы
| Поле | Результат |
|---|---|
boolean | boolean |
дата | дата |
date_nanos | date_nanos |
double | double |
integer | integer |
ip | ip |
ключевое слово | ключевое слово |
long | long |
текст | ключевое слово |
версия | версия |
Пример
FROM employees | EVAL first_letter = SUBSTRING(first_name, 0, 1) | STATS first_name=MV_SORT(VALUES(first_name)) BY first_letter | SORT first_letter
| first_name:keyword | first_letter:keyword |
|---|---|
[Alejandro, Amabile, Anneke, Anoosh, Arumugam] | A |
[Basil, Berhard, Berni, Bezalel, Bojan, Breannda, Brendon] | B |
[Charlene, Chirstian, Claudi, Cristinel] | C |
[Danel, Divier, Domenick, Duangkaew] | D |
[Ebbe, Eberhardt, Erez] | E |
Florian | F |
[Gao, Georgi, Georgy, Gino, Guoxiang] | G |
[Heping, Hidefumi, Hilari, Hironobu, Hironoby, Hisao] | H |
[Jayson, Jungsoon] | J |
[Kazuhide, Kazuhito, Kendra, Kenroku, Kshitij, Kwee, Kyoichi] | K |
[Lillian, Lucien] | L |
[Magy, Margareta, Mary, Mayuko, Mayumi, Mingsen, Mokhtar, Mona, Moss] | M |
Otmar | O |
[Parto, Parviz, Patricio, Prasadram, Premal] | P |
[Ramzi, Remzi, Reuven] | R |
[Sailaja, Saniya, Sanjiv, Satosi, Shahaf, Shir, Somnath, Sreekrishna, Sudharsan, Sumant, Suzette] | S |
[Tse, Tuval, Tzvetan] | T |
[Udi, Uri] | U |
[Valdiodio, Valter, Vishv] | V |
Weiyi | W |
Xinglin | X |
[Yinghua, Yishay, Yongqiao] | Y |
[Zhongwei, Zvonko] | Z |
null | null |
Это может потребовать значительного объёма памяти, и ES|QL пока не поддерживает агрегацию за пределами памяти. Поэтому эта агрегация будет работать, пока не будет использована для сбора большего количества значений, чем может поместиться в памяти. Как только будет собрано слишком много значений, запрос завершится ошибкой Circuit Breaker Error.
WEIGHTED_AVG
Синтаксис
Параметры
-
number - Численное значение.
-
weight - Численное значение веса.
Описание
Взвешенное среднее значение числового выражения.
Поддерживаемые типы
| число | вес | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | double |
integer | long | double |
long | double | double |
long | integer | double |
long | long | double |
Пример
FROM employees | STATS w_avg = WEIGHTED_AVG(salary, height) by languages | EVAL w_avg = ROUND(w_avg) | KEEP w_avg, languages | SORT languages
| w_avg:double | languages:integer |
|---|---|
51464.0 | 1 |
48477.0 | 2 |
52379.0 | 3 |
47990.0 | 4 |
42119.0 | 5 |
52142.0 | null |
Функции группировки ES|QL
Команда STATS поддерживает следующие функции группировки:
BUCKET
Синтаксис
Параметры
-
field - Численное или временное выражение, из которого должны быть получены ведерки.
-
buckets - Целевое количество ведер или желаемый размер ведра, если параметры
fromиtoопущены. -
from - Начало диапазона. Может быть числом, датой или датой, выраженной строкой.
-
to - Конец диапазона. Может быть числом, датой или датой, выраженной строкой.
Описание
Создает группы значений — ведерки — из входных данных в формате даты или числа. Размер ведер может быть задан непосредственно или выбран на основе рекомендуемого количества и диапазона значений.
Поддерживаемые типы
| поле | ведерки | от | до | результат |
|---|
дата | период_дат | дата | ||
дата | целое | дата | дата | дата |
дата | целое | дата | ключевое_слово | дата |
дата | целое | дата | текст | дата |
дата | целое | ключевое_слово | дата | дата |
дата | целое | ключевое_слово | ключевое_слово | дата |
дата | целое | ключевое_слово | текст | дата |
дата | целое | текст | дата | дата |
дата | целое | текст | ключевое_слово | дата |
дата | целое | текст | текст | дата |
дата | продолжительность_времени | дата | ||
двойное | двойное | двойное | ||
двойное | целое | двойное | двойное | двойное |
двойное | целое | двойное | целое | двойное |
двойное | целое | двойное | длинное | двойное |
двойное | целое | целое | двойное | двойное |
двойное | целое | целое | целое | двойное |
двойное | целое | целое | длинное | двойное |
двойное | целое | длинное | двойное | двойное |
двойное | целое | длинное | целое | двойное |
двойное | целое | длинное | длинное | двойное |
двойное | целое | двойное | ||
двойное | длинное | двойное |
целое число | вещественное число | вещественное число | ||
целое число | целое число | вещественное число | вещественное число | вещественное число |
целое число | целое число | вещественное число | целое число | вещественное число |
целое число | целое число | вещественное число | длинное целое число | вещественное число |
целое число | целое число | вещественное число | вещественное число | вещественное число |
целое число | целое число | целое число | целое число | вещественное число |
целое число | целое число | целое число | длинное целое число | вещественное число |
целое число | целое число | длинное целое число | вещественное число | вещественное число |
целое число | целое число | длинное целое число | целое число | вещественное число |
целое число | целое число | длинное целое число | длинное целое число | вещественное число |
целое число | целое число | вещественное число | ||
целое число | длинное целое число | вещественное число | ||
длинное целое число | вещественное число | вещественное число | ||
длинное целое число | целое число | вещественное число | вещественное число | вещественное число |
длинное целое число | целое число | вещественное число | целое число | вещественное число |
длинное целое число | целое число | вещественное число | длинное целое число | вещественное число |
длинное целое число | целое число | целое число | вещественное число | вещественное число |
длинное целое число | целое число | целое число | целое число | вещественное число |
длинное целое число | целое число | целое число | длинное целое число | вещественное число |
длинное целое число | целое число | длинное целое число | вещественное число | вещественное число |
длинное целое число | целое число | длинное целое число | целое число | вещественное число |
длинное целое число | целое число | длинное целое число | длинное целое число | вещественное число |
длинное целое число | целое число | вещественное число |
long | long | double |
Примеры
BUCKET может работать в двух режимах: в одном режиме размер корзины вычисляется на основе рекомендации по количеству корзин (четыре параметра) и диапазона, а в другом режиме размер корзины предоставляется напрямую (два параметра).
Используя целевое число корзин, начало диапазона и конец диапазона, BUCKET выбирает подходящий размер корзины для генерации целевого числа корзин или меньше. Например, запрос на максимальное количество 20 корзин за год приводит к ежемесячным корзинам:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS hire_date = MV_SORT(VALUES(hire_date)) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") | SORT hire_date
| hire_date:date | month:date |
|---|---|
[1985-02-18T00:00:00.000Z, 1985-02-24T00:00:00.000Z] | 1985-02-01T00:00:00.000Z |
1985-05-13T00:00:00.000Z | 1985-05-01T00:00:00.000Z |
1985-07-09T00:00:00.000Z | 1985-07-01T00:00:00.000Z |
1985-09-17T00:00:00.000Z | 1985-09-01T00:00:00.000Z |
[1985-10-14T00:00:00.000Z, 1985-10-20T00:00:00.000Z] | 1985-10-01T00:00:00.000Z |
[1985-11-19T00:00:00.000Z, 1985-11-20T00:00:00.000Z, 1985-11-21T00:00:00.000Z] | 1985-11-01T00:00:00.000Z |
Цель не в том, чтобы предоставить ровно целевое число корзин, а в том, чтобы выбрать диапазон, с которым люди чувствуют себя комфортно, обеспечивающий не более целевого числа корзин.
Объедините BUCKET с агрегацией, чтобы создать гистограмму:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS hires_per_month = COUNT(*) BY month = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") | SORT month
| hires_per_month:long | month:date |
|---|---|
2 | 1985-02-01T00:00:00.000Z |
1 | 1985-05-01T00:00:00.000Z |
1 | 1985-07-01T00:00:00.000Z |
1 | 1985-09-01T00:00:00.000Z |
2 | 1985-10-01T00:00:00.000Z |
4 | 1985-11-01T00:00:00.000Z |
BUCKET не создаёт корзины, которые не соответствуют ни одному документу. Вот почему в этом примере отсутствуют 1985-03-01 и другие даты.
Запрос на большее количество корзин может привести к меньшему диапазону. Например, запрос на максимальное количество 100 корзин в году приводит к еженедельным корзинам:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 100, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") | SORT week
| hires_per_week:long | week:date |
|---|---|
2 | 1985-02-18T00:00:00.000Z |
1 | 1985-05-13T00:00:00.000Z |
1 | 1985-07-08T00:00:00.000Z |
1 | 1985-09-16T00:00:00.000Z |
2 | 1985-10-14T00:00:00.000Z |
4 | 1985-11-18T00:00:00.000Z |
BUCKET не фильтрует какие-либо строки. Он просто использует предоставленный диапазон для выбора хорошего размера корзины. Для строк со значением вне диапазона он возвращает значение корзины, соответствующее корзине вне диапазона. Объедините `BUCKET` с WHERE, чтобы отфильтровать строки.
Если размер требуемого интервала известен заранее, просто укажите его как второй аргумент, опуская диапазон:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS hires_per_week = COUNT(*) BY week = BUCKET(hire_date, 1 week) | SORT week
| hires_per_week:long | week:date |
|---|---|
2 | 1985-02-18T00:00:00.000Z |
1 | 1985-05-13T00:00:00.000Z |
1 | 1985-07-08T00:00:00.000Z |
1 | 1985-09-16T00:00:00.000Z |
2 | 1985-10-14T00:00:00.000Z |
4 | 1985-11-18T00:00:00.000Z |
При указании размера интервала в качестве второго параметра, он должен быть продолжительностью времени или периодом дат.
BUCKET также может работать с числовыми полями. Например, для создания гистограммы заработной платы:
FROM employees | STATS COUNT(*) by bs = BUCKET(salary, 20, 25324, 74999) | SORT bs
| COUNT(*):long | bs:double |
|---|---|
9 | 25000.0 |
9 | 30000.0 |
18 | 35000.0 |
11 | 40000.0 |
11 | 45000.0 |
10 | 50000.0 |
7 | 55000.0 |
9 | 60000.0 |
8 | 65000.0 |
8 | 70000.0 |
В отличие от предыдущего примера, который намеренно фильтрует по диапазону дат, вы редко захотите фильтровать по числовому диапазону. Вам нужно найти min и max по отдельности. ES|QL пока не имеет простого способа сделать это автоматически.
Диапазон можно опустить, если размер требуемого интервала известен заранее. Просто укажите его как второй аргумент:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS c = COUNT(1) BY b = BUCKET(salary, 5000.) | SORT b
| c:long | b:double |
|---|---|
1 | 25000.0 |
1 | 30000.0 |
1 | 40000.0 |
2 | 45000.0 |
2 | 50000.0 |
1 | 55000.0 |
1 | 60000.0 |
1 | 65000.0 |
1 | 70000.0 |
Создайте часовые интервалы для последних 24 часов и вычислите количество событий за каждый час:
FROM sample_data | WHERE @timestamp >= NOW() - 1 day and @timestamp < NOW() | STATS COUNT(*) BY bucket = BUCKET(@timestamp, 25, NOW() - 1 day, NOW())
| COUNT(*):long | bucket:date |
|---|
Создайте ежемесячные интервалы для 1985 года и вычислите среднюю заработную плату по месяцу найма:
FROM employees | WHERE hire_date >= "1985-01-01T00:00:00Z" AND hire_date < "1986-01-01T00:00:00Z" | STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") | SORT bucket
| AVG(salary):double | bucket:date |
|---|---|
46305.0 | 1985-02-01T00:00:00.000Z |
44817.0 | 1985-05-01T00:00:00.000Z |
62405.0 | 1985-07-01T00:00:00.000Z |
49095.0 | 1985-09-01T00:00:00.000Z |
51532.0 | 1985-10-01T00:00:00.000Z |
54539.75 | 1985-11-01T00:00:00.000Z |
BUCKET может использоваться как в агрегирующей, так и в группирующей части команды STATS … BY …, при условии, что в агрегирующей части функция ссылается на псевдоним, определенный в группирующей части, или вызывается с точно таким же выражением:
FROM employees | STATS s1 = b1 + 1, s2 = BUCKET(salary / 1000 + 999, 50.) + 2 BY b1 = BUCKET(salary / 100 + 99, 50.), b2 = BUCKET(salary / 1000 + 999, 50.) | SORT b1, b2 | KEEP s1, b1, s2, b2
| s1:double | b1:double | s2:double | b2:double |
|---|---|---|---|
351.0 | 350.0 | 1002.0 | 1000.0 |
401.0 | 400.0 | 1002.0 | 1000.0 |
451.0 | 450.0 | 1002.0 | 1000.0 |
501.0 | 500.0 | 1002.0 | 1000.0 |
551.0 | 550.0 | 1002.0 | 1000.0 |
601.0 | 600.0 | 1002.0 | 1000.0 |
601.0 | 600.0 | 1052.0 | 1050.0 |
651.0 | 650.0 | 1052.0 | 1050.0 |
701.0 | 700.0 | 1052.0 | 1050.0 |
751.0 | 750.0 | 1052.0 | 1050.0 |
801.0 | 800.0 | 1052.0 | 1050.0 |
Условные функции и выражения ES|QL
Условные функции возвращают один из своих аргументов, оценивая их по принципу if-else. ES|QL поддерживает следующие условные функции:
CASE
Синтаксис
Параметры
-
condition - Условие.
-
trueValue - Значение, возвращаемое, когда соответствующее условие первым оценивается как
true. По умолчанию возвращается значение, если ни одно условие не соответствует. -
elseValue - Значение, возвращаемое, когда ни одно условие не оценивается как
true.
Описание
Принимает пары условий и значений. Функция возвращает значение, соответствующее первому условию, которое оценивается как true. Если количество аргументов нечетное, последний аргумент — значение по умолчанию, которое возвращается, если ни одно условие не соответствует. Если количество аргументов четное и ни одно условие не соответствует, функция возвращает null.
Поддерживаемые типы
| condition | trueValue | elseValue | результат |
|---|
boolean | boolean | boolean | boolean |
boolean | boolean | boolean | |
boolean | cartesian_point | cartesian_point | cartesian_point |
boolean | cartesian_point | cartesian_point | |
boolean | cartesian_shape | cartesian_shape | cartesian_shape |
boolean | cartesian_shape | cartesian_shape | |
boolean | date | date | date |
boolean | date | date | |
boolean | date_nanos | date_nanos | date_nanos |
boolean | date_nanos | date_nanos | |
boolean | double | double | double |
boolean | double | double | |
boolean | geo_point | geo_point | geo_point |
boolean | geo_point | geo_point | |
boolean | geo_shape | geo_shape | geo_shape |
boolean | geo_shape | geo_shape | |
boolean | integer | integer | integer |
boolean | integer | integer | |
boolean | ip | ip | ip |
boolean | ip | ip | |
boolean | keyword | keyword | keyword |
boolean | keyword | text | keyword |
boolean | keyword | keyword | |
boolean | long | long | long |
boolean | long | long | |
boolean | text | keyword | keyword |
boolean | text | text | keyword |
boolean | text | keyword |
boolean | unsigned_long | unsigned_long | unsigned_long |
boolean | unsigned_long | unsigned_long | |
boolean | version | version | version |
boolean | version | version |
Примеры
Определите, являются ли сотрудники монолингвами, билингвами или полиглотами:
FROM employees
| EVAL type = CASE(
languages <= 1, "monolingual",
languages <= 2, "bilingual",
"polyglot")
| KEEP emp_no, languages, type | emp_no:целое | languages:целое | type:ключевое слово |
|---|---|---|
10001 | 2 | билингва |
10002 | 5 | полиглот |
10003 | 4 | полиглот |
10004 | 5 | полиглот |
10005 | 1 | монолингва |
Рассчитайте общий показатель успешности подключения на основе сообщений журнала:
FROM sample_data
| EVAL successful = CASE(
STARTS_WITH(message, "Connected to"), 1,
message == "Connection error", 0
)
| STATS success_rate = AVG(successful) | success_rate:двойное |
|---|
0.5 |
Рассчитайте часовой показатель ошибок в процентах от общего числа сообщений журнала:
FROM sample_data | EVAL error = CASE(message LIKE "*error*", 1, 0) | EVAL hour = DATE_TRUNC(1 hour, @timestamp) | STATS error_rate = AVG(error) by hour | SORT hour
| error_rate:двойное | hour:дата |
|---|---|
0.0 | 2023-10-23T12:00:00.000Z |
0.6 | 2023-10-23T13:00:00.000Z |
COALESCE
Синтаксис
Параметры
-
first - Выражение для оценки.
-
rest - Другое выражение для оценки.
Описание
Возвращает первый из своих аргументов, который не равен null. Если все аргументы равны null, возвращает null.
Поддерживаемые типы
| first | rest | result |
|---|---|---|
boolean | boolean | boolean |
boolean | boolean | |
cartesian_point | cartesian_point | cartesian_point |
cartesian_shape | cartesian_shape | cartesian_shape |
date | date | date |
date_nanos | date_nanos | date_nanos |
geo_point | geo_point | geo_point |
geo_shape | geo_shape | geo_shape |
integer | integer | integer |
integer | integer | |
ip | ip | ip |
keyword | keyword | keyword |
keyword | keyword | |
long | long | long |
long | long | |
text | text | keyword |
text | keyword | |
version | version | version |
Пример
ROW a=null, b="b" | EVAL COALESCE(a, b)
| a:null | b:keyword | COALESCE(a, b):keyword |
|---|---|---|
null | b | b |
GREATEST
Синтаксис
Параметры
-
first - Первый из столбцов для оценки.
-
rest - Остальные столбцы для оценки.
Описание
Возвращает максимальное значение из нескольких столбцов. Это аналогично MV_MAX, за исключением того, что оно предназначено для одновременной работы с несколькими столбцами.
При работе со столбцами keyword или text, возвращает последнюю строку в алфавитном порядке. При работе со столбцами boolean, возвращает true, если какие-либо значения являются true.
Поддерживаемые типы
| первый | остальные | результат |
|---|---|---|
boolean | boolean | boolean |
boolean | boolean | |
дата | дата | дата |
дата_наносекунды | дата_наносекунды | дата_наносекунды |
double | double | double |
целое | целое | целое |
целое | целое | |
ip | ip | ip |
ключевое_слово | ключевое_слово | ключевое_слово |
ключевое_слово | ключевое_слово | |
long | long | long |
long | long | |
текст | текст | ключевое_слово |
текст | ключевое_слово | |
версия | версия | версия |
Пример
ROW a = 10, b = 20 | EVAL g = GREATEST(a, b)
| a:целое | b:целое | g:целое |
|---|---|---|
10 | 20 | 20 |
LEAST
Синтаксис
Параметры
-
first - Первый из столбцов для оценки.
-
rest - Остальные столбцы для оценки.
Описание
Возвращает минимальное значение из нескольких столбцов. Это аналогично MV_MIN, за исключением того, что оно предназначено для одновременной работы с несколькими столбцами.
Поддерживаемые типы
| первое | остальные | результат |
|---|---|---|
boolean | boolean | boolean |
boolean | boolean | |
дата | дата | дата |
date_nanos | date_nanos | date_nanos |
double | double | double |
целое | целое | целое |
целое | целое | |
ip | ip | ip |
ключевое слово | ключевое слово | ключевое слово |
ключевое слово | ключевое слово | |
long | long | long |
long | long | |
текст | текст | ключевое слово |
текст | ключевое слово | |
версия | версия | версия |
Пример
ROW a = 10, b = 20 | EVAL l = LEAST(a, b)
| a:целое | b:целое | l:целое |
|---|---|---|
10 | 20 | 10 |
ES|QL функции даты и времени
ES|QL поддерживает следующие функции даты и времени:
DATE_DIFF
Синтаксис
Параметры
-
unit - Единица измерения разницы во времени
-
startTimestamp - Строка, представляющая начальную временную метку
-
endTimestamp - Строка, представляющая конечную временную метку
Описание
Вычитает startTimestamp из endTimestamp и возвращает разницу в кратных unit. Если startTimestamp позже, чем endTimestamp, возвращаются отрицательные значения.
| Единицы измерения разницы во времени | |
|---|---|
unit | сокращения |
год | годы, гг, гггг |
квартал | кварталы, кв, к |
месяц | месяцы, мм, м |
день года | д, г |
день | дни, дд, д |
неделя | недели, нед, нн |
день недели | дни недели, днн |
час | часы, чч |
минута | минуты, мин, н |
секунда | секунды, сс, с |
миллисекунда | миллисекунды, мс |
микросекунда | микросекунды, мкс |
наносекунда | наносекунды, нс |
Обратите внимание, что хотя поддерживаемые единицы функции и поддерживаемые временные интервалы ES|QL перекрываются, эти наборы различны и не взаимозаменяемы. Аналогичным образом, поддерживаемые сокращения удобно совместно используются с реализациями этой функции в других устоявшихся продуктах и не обязательно являются общими с номенклатурой даты и времени, используемой Elasticsearch.
Поддерживаемые типы
| единица | начальное время | конечное время | результат |
|---|---|---|---|
ключевое слово | дата | дата | целое число |
текст | дата | дата | целое число |
Примеры
ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")
| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2) | date1:дата | date2:дата | dd_ms:целое число |
|---|---|---|
2023-12-02T11:00:00.000Z | 2023-12-02T11:00:00.001Z | 1000 |
При вычитании в календарных единицах — таких как год, месяц и т. д. — учитываются только полностью прошедшие единицы. Чтобы избежать этого и получить также остатки, просто переключитесь на следующую меньшую единицу и выполните соответствующее вычисление дат.
ROW end_23=TO_DATETIME("2023-12-31T23:59:59.999Z"),
start_24=TO_DATETIME("2024-01-01T00:00:00.000Z"),
end_24=TO_DATETIME("2024-12-31T23:59:59.999")
| EVAL end23_to_start24=DATE_DIFF("year", end_23, start_24)
| EVAL end23_to_end24=DATE_DIFF("year", end_23, end_24)
| EVAL start_to_end_24=DATE_DIFF("year", start_24, end_24) | end_23:дата | start_24:дата | end_24:дата | end23_to_start24:целое число | end23_to_end24:целое число | start_to_end_24:целое число |
|---|---|---|---|---|---|
2023-12-31T23:59:59.999Z | 2024-01-01T00:00:00.000Z | 2024-12-31T23:59:59.999Z | 0 | 1 | 0 |
DATE_EXTRACT
Синтаксис
Параметры
-
datePart - Часть даты для извлечения. Может быть:
aligned_day_of_week_in_month,aligned_day_of_week_in_year,aligned_week_of_month,aligned_week_of_year,ampm_of_day,clock_hour_of_ampm,clock_hour_of_day,day_of_month,day_of_week,day_of_year,epoch_day,era,hour_of_ampm,hour_of_day,instant_seconds,micro_of_day,micro_of_second,milli_of_day,milli_of_second,minute_of_day,minute_of_hour,month_of_year,nano_of_day,nano_of_second,offset_seconds,proleptic_month,second_of_day,second_of_minute,yearилиyear_of_era. Обратитесь к java.time.temporal.ChronoField за описанием этих значений. Еслиnull, функция возвращаетnull. -
date - Выражение даты. Если
null, функция возвращаетnull.
Описание
Извлекает части даты, такие как год, месяц, день, час.
Поддерживаемые типы
| datePart | дата | результат |
|---|---|---|
ключевое слово | дата | длинное целое число |
текст | дата | длинное целое число |
Примеры
ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")
| EVAL year = DATE_EXTRACT("year", date) | date:date | year:long |
|---|---|
2022-05-06T00:00:00.000Z | 2022 |
Найдите все события, произошедшие вне рабочего времени (до 9 утра или после 17:00), в любой заданный день:
FROM sample_data
| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17 | @timestamp:date | client_ip:ip | event_duration:long | message:keyword |
|---|
DATE_FORMAT
Синтаксис
Параметры
-
dateFormat - Формат даты (необязательно). Если формат не указан, используется формат
yyyy-MM-dd'T'HH:mm:ss.SSSZ. Еслиnull, функция возвращаетnull. -
date - Выражение даты. Если
null, функция возвращаетnull.
Описание
Возвращает строковое представление даты в указанном формате.
Поддерживаемые типы
| dateFormat | date | результат |
|---|---|---|
ключевое слово | дата | ключевое слово |
текст | дата | ключевое слово |
Пример
FROM employees
| KEEP first_name, last_name, hire_date
| EVAL hired = DATE_FORMAT("yyyy-MM-dd", hire_date) | first_name:ключевое слово | last_name:ключевое слово | hire_date:дата | hired:ключевое слово |
|---|---|---|---|
Alejandro | McAlpine | 1991-06-26T00:00:00.000Z | 1991-06-26 |
Amabile | Gomatam | 1992-11-18T00:00:00.000Z | 1992-11-18 |
Anneke | Preusig | 1989-06-02T00:00:00.000Z | 1989-06-02 |
DATE_PARSE
Синтаксис
Параметры
-
datePattern - Формат даты. Обратитесь к
DateTimeFormatterдокументации для синтаксиса. Еслиnull, функция возвращаетnull. -
dateString - Выражение даты в виде строки. Если
nullили пустая строка, функция возвращаетnull.
Описание
Возвращает дату, анализируя второй аргумент с использованием формата, указанного в первом аргументе.
Поддерживаемые типы
| datePattern | dateString | результат |
|---|---|---|
ключевое слово | ключевое слово | дата |
ключевое слово | текст | дата |
текст | ключевое слово | дата |
текст | текст | дата |
Пример
ROW date_string = "2022-05-06"
| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string) | date_string:ключевое слово | дата:дата |
|---|---|
2022-05-06 | 2022-05-06T00:00:00.000Z |
DATE_TRUNC
Синтаксис
Параметры
-
interval - Интервал; выражается с помощью синтаксиса литералов временных интервалов.
-
date - Выражение даты
Описание
Округляет дату вниз до ближайшего интервала.
Поддерживаемые типы
| интервал | дата | результат |
|---|---|---|
период_дат | дата | дата |
период_дат | дата_наносекунды | дата_наносекунды |
продолжительность_времени | дата | дата |
продолжительность_времени | дата_наносекунды | дата_наносекунды |
Примеры
FROM employees | KEEP first_name, last_name, hire_date | EVAL year_hired = DATE_TRUNC(1 year, hire_date)
| first_name:keyword | last_name:keyword | hire_date:date | year_hired:date |
|---|---|---|---|
Алехандро | МакАлпайн | 1991-06-26T00:00:00.000Z | 1991-01-01T00:00:00.000Z |
Амабиле | Гоматам | 1992-11-18T00:00:00.000Z | 1992-01-01T00:00:00.000Z |
Аннеке | Преузиг | 1989-06-02T00:00:00.000Z | 1989-01-01T00:00:00.000Z |
Объедините DATE_TRUNC с STATS, чтобы создать гистограммы дат. Например, количество наёмных сотрудников в год:
FROM employees | EVAL year = DATE_TRUNC(1 year, hire_date) | STATS hires = COUNT(emp_no) BY year | SORT year
| hires:long | year:date |
|---|---|
11 | 1985-01-01T00:00:00.000Z |
11 | 1986-01-01T00:00:00.000Z |
15 | 1987-01-01T00:00:00.000Z |
9 | 1988-01-01T00:00:00.000Z |
13 | 1989-01-01T00:00:00.000Z |
12 | 1990-01-01T00:00:00.000Z |
6 | 1991-01-01T00:00:00.000Z |
8 | 1992-01-01T00:00:00.000Z |
3 | 1993-01-01T00:00:00.000Z |
4 | 1994-01-01T00:00:00.000Z |
5 | 1995-01-01T00:00:00.000Z |
1 | 1996-01-01T00:00:00.000Z |
1 | 1997-01-01T00:00:00.000Z |
1 | 1999-01-01T00:00:00.000Z |
Или часовая скорость ошибок:
FROM sample_data | EVAL error = CASE(message LIKE "*error*", 1, 0) | EVAL hour = DATE_TRUNC(1 hour, @timestamp) | STATS error_rate = AVG(error) by hour | SORT hour
| error_rate:double | hour:date |
|---|---|
0.0 | 2023-10-23T12:00:00.000Z |
0.6 | 2023-10-23T13:00:00.000Z |
NOW
Синтаксис
Параметры
Описание
Возвращает текущую дату и время.
Поддерживаемые типы
| результат |
|---|
дата |
Примеры
ROW current_date = NOW()
| y:keyword |
|---|
20 |
Для получения логов за последний час:
FROM sample_data | WHERE @timestamp > NOW() - 1 hour
| @timestamp:дата | client_ip:IP-адрес | event_duration:длина | message:ключевое слово |
|---|
Функции ES|QL для IP-адресов
ES|QL поддерживает следующие функции для работы с IP-адресами:
CIDR_MATCH
Синтаксис
Параметры
-
ip - IP-адрес типа
ip(поддерживаются IPv4 и IPv6). -
blockX - CIDR-блок для проверки IP-адреса.
Описание
Возвращает true, если предоставленный IP-адрес содержится в одном из предоставленных CIDR-блоков.
Поддерживаемые типы
| ip | blockX | результат |
|---|---|---|
ip | ключевое слово | булево |
ip | текст | булево |
Пример
FROM hosts | WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") | KEEP card, host, ip0, ip1
| card:ключевое слово | host:ключевое слово | ip0:ip | ip1:ip |
|---|---|---|---|
eth1 | beta | 127.0.0.1 | 127.0.0.2 |
eth0 | gamma | fe80::cae2:65ff:fece:feb9 | 127.0.0.3 |
IP_PREFIX
Синтаксис
Параметры
-
ip - IP-адрес типа
ip(поддерживаются IPv4 и IPv6). -
prefixLengthV4 - Длина префикса для IPv4-адресов.
-
prefixLengthV6 - Длина префикса для IPv6-адресов.
Описание
Усекает IP-адрес до заданной длины префикса.
Поддерживаемые типы
| ip | prefixLengthV4 | prefixLengthV6 | результат |
|---|---|---|---|
ip | целое число | целое число | ip |
Пример
row ip4 = to_ip("1.2.3.4"), ip6 = to_ip("fe80::cae2:65ff:fece:feb9")
| eval ip4_prefix = ip_prefix(ip4, 24, 0), ip6_prefix = ip_prefix(ip6, 0, 112); | ip4:ip | ip6:ip | ip4_prefix:ip | ip6_prefix:ip |
|---|---|---|---|
1.2.3.4 | fe80::cae2:65ff:fece:feb9 | 1.2.3.0 | fe80::cae2:65ff:fece:0000 |
Математические функции ES|QL
ES|QL поддерживает следующие математические функции:
ABS
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает абсолютное значение.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | integer |
long | long |
unsigned_long | unsigned_long |
Примеры
ROW number = -1.0 | EVAL abs_number = ABS(number)
| number:double | abs_number:double |
|---|---|
-1.0 | 1.0 |
FROM employees | KEEP first_name, last_name, height | EVAL abs_height = ABS(0.0 - height)
| first_name:keyword | last_name:keyword | height:double | abs_height:double |
|---|---|---|---|
Алехандро | МакАлпин | 1.48 | 1.48 |
Амабиле | Гоматам | 2.09 | 2.09 |
Аннеке | Преузиг | 1.56 | 1.56 |
ACOS
Синтаксис
Параметры
-
number - Число от -1 до 1. Если
null, функция возвращаетnull.
Описание
Возвращает арккосинус n в радианах.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=.9 | EVAL acos=ACOS(a)
| a:double | acos:double |
|---|---|
.9 | 0.45102681179626236 |
ASIN
Синтаксис
Параметры
-
number - Число от -1 до 1. Если
null, функция возвращаетnull.
Описание
Возвращает арксинус числового выражения в радианах.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=.9 | EVAL asin=ASIN(a)
| a:double | asin:double |
|---|---|
.9 | 1.1197695149986342 |
ATAN
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает арктангенс входного числового выражения как угол, выраженный в радианах.
Поддерживаемые типы
| number | result |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=12.9 | EVAL atan=ATAN(a)
| a:double | atan:double |
|---|---|
12.9 | 1.4934316673669235 |
ATAN2
Синтаксис
Параметры
-
y_coordinate - Координата y. Если
null, функция возвращаетnull. -
x_coordinate - Координата x. Если
null, функция возвращаетnull.
Описание
Угол между положительной осью x и лучом из начала координат в точку (x, y) в декартовой системе координат, выраженный в радианах.
Поддерживаемые типы
| y_coordinate | x_coordinate | result |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
double | unsigned_long | double |
integer | double | double |
integer | integer | double |
integer | long | double |
integer | unsigned_long | double |
long | double | double |
long | integer | double |
long | long | double |
long | unsigned_long | double |
unsigned_long | double | double |
unsigned_long | integer | double |
unsigned_long | long | double |
unsigned_long | unsigned_long | double |
Пример
ROW y=12.9, x=.6 | EVAL atan2=ATAN2(y, x)
| y:double | x:double | atan2:double |
|---|---|---|
12.9 | 0.6 | 1.5243181954438936 |
CBRT
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает кубический корень числа. Вход может быть любым числовым значением, возвращаемое значение всегда является double. Кубические корни бесконечностей равны нулю.
Поддерживаемые типы
| number | result |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW d = 1000.0 | EVAL c = cbrt(d)
| d: double | c:double |
|---|---|
1000.0 | 10.0 |
CEIL
Синтаксис
Параметры
-
number - Численное выражение. Если
null, функция возвращаетnull.
Описание
Округляет число до ближайшего целого вверх.
Это нет действия для long (включая беззнаковые) и integer. Для double выбирается ближайшее значение double к целому числу, аналогично Math.ceil.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | integer |
long | long |
unsigned_long | unsigned_long |
Пример
ROW a=1.8 | EVAL a=CEIL(a)
| a:double |
|---|
2 |
COS
Синтаксис
Параметры
-
angle - Угол в радианах. Если
null, функция возвращаетnull.
Описание
Возвращает косинус угла.
Поддерживаемые типы
| angle | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL cos=COS(a)
| a:double | cos:double |
|---|---|
1.8 | -0.2272020946930871 |
COSH
Синтаксис
Параметры
-
number - Численное выражение. Если
null, функция возвращаетnull.
Описание
Возвращает гиперболический косинус числа.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL cosh=COSH(a)
| a:double | cosh:double |
|---|---|
1.8 | 3.1074731763172667 |
E
Синтаксис
Параметры
Описание
Возвращает число Эйлера.
Поддерживаемые типы
| результат |
|---|
double |
Пример
ROW E()
| E():double |
|---|
2.718281828459045 |
EXP
Синтаксис
Параметры
-
number - Численное выражение. Если
null, функция возвращаетnull.
Описание
Возвращает значение e, возведенное в степень заданного числа.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW d = 5.0 | EVAL s = EXP(d)
| d: double | s:double |
|---|---|
5.0 | 148.413159102576603 |
FLOOR
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Округляет число вниз до ближайшего целого.
Это пустая операция для long (включая беззнаковые) и integer. Для double выбирает ближайшее double значение к целому, аналогично Math.floor.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | integer |
long | long |
unsigned_long | unsigned_long |
Пример
ROW a=1.8 | EVAL a=FLOOR(a)
| a:double |
|---|
1 |
HYPOT
Синтаксис
Параметры
-
number1 - Числовое выражение. Если
null, функция возвращаетnull. -
number2 - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает гипотенузу двух чисел. На вход могут быть переданы любые числовые значения, возвращаемое значение всегда является double. Гипотенузы бесконечностей равны null.
Поддерживаемые типы
| number1 | number2 | result |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
double | unsigned_long | double |
integer | double | double |
integer | integer | double |
integer | long | double |
integer | unsigned_long | double |
long | double | double |
long | integer | double |
long | long | double |
long | unsigned_long | double |
unsigned_long | double | double |
unsigned_long | integer | double |
unsigned_long | long | double |
unsigned_long | unsigned_long | double |
Пример
ROW a = 3.0, b = 4.0 | EVAL c = HYPOT(a, b)
| a:double | b:double | c:double |
|---|---|---|
3.0 | 4.0 | 5.0 |
LOG
Синтаксис
Параметры
-
base - Основание логарифма. Если
null, функция возвращаетnull. Если не указано, функция возвращает натуральный логарифм (основание e) от значения. -
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает логарифм значения по заданному основанию. Входное значение может быть любым числовым значением, возвращаемое значение всегда является double. Логарифмы нуля, отрицательных чисел и основания единицы возвращают null, а также выдают предупреждение.
Поддерживаемые типы
| база | число | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
double | unsigned_long | double |
double | double | |
integer | double | double |
integer | integer | double |
integer | long | double |
integer | unsigned_long | double |
integer | double | |
long | double | double |
long | integer | double |
long | long | double |
long | unsigned_long | double |
long | double | |
unsigned_long | double | double |
unsigned_long | integer | double |
unsigned_long | long | double |
unsigned_long | unsigned_long | double |
unsigned_long | double |
Примеры
ROW base = 2.0, value = 8.0 | EVAL s = LOG(base, value)
| база: double | значение: double | s:double |
|---|---|---|
2.0 | 8.0 | 3.0 |
row value = 100 | EVAL s = LOG(value);
| значение: integer | s:double |
|---|---|
100 | 4.605170185988092 |
LOG10
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает десятичный логарифм значения. Входное значение может быть любым числовым значением, возвращаемое значение всегда является double. Логарифмы 0 и отрицательных чисел возвращают null, а также предупреждение.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW d = 1000.0 | EVAL s = LOG10(d)
| d: double | s:double |
|---|---|
1000.0 | 3.0 |
PI
Синтаксис
Параметры
Описание
Возвращает значение числа π — отношение окружности к диаметру круга.
Поддерживаемые типы
| результат |
|---|
double |
Пример
ROW PI()
| PI():double |
|---|
3.141592653589793 |
POW
Синтаксис
Параметры
-
base - Числовое выражение для основания. Если
null, функция возвращаетnull. -
exponent - Числовое выражение для показателя степени. Если
null, функция возвращаетnull.
Описание
Возвращает значение base, возведенное в степень exponent.
В данном случае всё ещё возможно переполнение результата типа double; в этом случае будет возвращено значение null.
Поддерживаемые типы
| основание | показатель степени | результат |
|---|---|---|
double | double | double |
double | целое число | double |
double | long | double |
double | unsigned_long | double |
целое число | double | double |
целое число | целое число | double |
целое число | long | double |
целое число | unsigned_long | double |
long | double | double |
long | целое число | double |
long | long | double |
long | unsigned_long | double |
unsigned_long | double | double |
unsigned_long | целое число | double |
unsigned_long | long | double |
unsigned_long | unsigned_long | double |
Примеры
ROW base = 2.0, exponent = 2 | EVAL result = POW(base, exponent)
| основание:double | показатель степени:целое число | результат:double |
|---|---|---|
2.0 | 2 | 4.0 |
Показатель степени может быть дробью, что аналогично вычислению корня. Например, показатель степени 0.5 даст квадратный корень из основания:
ROW base = 4, exponent = 0.5 | EVAL s = POW(base, exponent)
| основание:целое число | показатель степени:double | s:double |
|---|---|---|
4 | 0.5 | 2.0 |
ROUND
Синтаксис
Параметры
-
number - Числовое значение для округления. Если
null, функция возвращаетnull. -
decimals - Количество десятичных знаков для округления. По умолчанию 0. Если
null, функция возвращаетnull.
Описание
Округляет число до заданного количества десятичных знаков. По умолчанию 0, что возвращает ближайшее целое число. Если точность отрицательная, округляет до указанного количества цифр слева от десятичной точки.
Поддерживаемые типы
| число | десятичные разряды | результат |
|---|---|---|
double | целое | double |
double | double | |
целое | целое | целое |
целое | целое | |
long | целое | long |
long | long | |
unsigned_long | unsigned_long |
Пример
FROM employees | KEEP first_name, last_name, height | EVAL height_ft = ROUND(height * 3.281, 1)
| first_name:keyword | last_name:keyword | height:double | height_ft:double |
|---|---|---|---|
Arumugam | Ossenbruggen | 2.1 | 6.9 |
Kwee | Schusler | 2.1 | 6.9 |
Saniya | Kalloufi | 2.1 | 6.9 |
SIGNUM
Синтаксис
Параметры
-
number - Численное выражение. Если
null, функция возвращаетnull.
Описание
Возвращает знак данного числа. Возвращает -1 для отрицательных чисел, 0 для 0 и 1 для положительных чисел.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
целое | double |
long | double |
unsigned_long | double |
Пример
ROW d = 100.0 | EVAL s = SIGNUM(d)
| d: double | s:double |
|---|---|
100 | 1.0 |
SIN
Синтаксис
Параметры
-
angle - Угол в радианах. Если
null, функция возвращаетnull.
Описание
Возвращает синус угла.
Поддерживаемые типы
| angle | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL sin=SIN(a)
| a:double | sin:double |
|---|---|
1.8 | 0.9738476308781951 |
SINH
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает гиперболический синус числа.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL sinh=SINH(a)
| a:double | sinh:double |
|---|---|
1.8 | 2.94217428809568 |
SQRT
Синтаксис
Параметры
-
number - Числовое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает квадратный корень из числа. Входное значение может быть любым числовым значением, возвращаемое значение всегда равно double. Квадратные корни из отрицательных чисел и бесконечностей равны null.
Поддерживаемые типы
| number | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW d = 100.0 | EVAL s = SQRT(d)
| d: double | s:double |
|---|---|
100.0 | 10.0 |
TAN
Синтаксис
Параметры
-
angle - Угол в радианах. Если
null, функция возвращаетnull.
Описание
Возвращает тангенс угла.
Поддерживаемые типы
| angle | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL tan=TAN(a)
| a:double | tan:double |
|---|---|
1.8 | -4.286261674628062 |
TANH
Синтаксис
Параметры
-
number - Численное выражение. Если
null, функция возвращаетnull.
Описание
Возвращает гиперболический тангенс числа.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=1.8 | EVAL tanh=TANH(a)
| a:double | tanh:double |
|---|---|
1.8 | 0.9468060128462683 |
TAU
Синтаксис
Параметры
Описание
Возвращает отношение окружности круга к его радиусу.
Поддерживаемые типы
| результат |
|---|
double |
Пример
ROW TAU()
| TAU():double |
|---|
6.283185307179586 |
ES|QL Функции полнотекстового поиска
ES|QL поддерживает следующие функции полнотекстового поиска:
- [превью] Эта функциональность находится в техническом превью и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
MATCH - [превью] Эта функциональность находится в техническом превью и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
QSTR
MATCH
Не используйте в производственных средах. Эта функциональность находится в техническом превью и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
Синтаксис
Параметры
-
field - Поле, на которое будет нацелен запрос.
-
query - Текст, который вы хотите найти в указанном поле.
Описание
Выполняет запрос соответствия по указанному полю. Возвращает значение true, если указанный запрос соответствует строке.
Поддерживаемые типы
| поле | запрос | результат |
|---|---|---|
ключевое слово | ключевое слово | булево |
ключевое слово | текст | булево |
текст | ключевое слово | булево |
текст | текст | булево |
Пример
FROM books | WHERE MATCH(author, "Faulkner") | KEEP book_no, author | SORT book_no | LIMIT 5;
| book_no:ключевое слово | author:текст |
|---|---|
2378 | [Carol Faulkner, Holly Byers Ochoa, Lucretia Mott] |
2713 | William Faulkner |
2847 | Colleen Faulkner |
2883 | William Faulkner |
3293 | Danny Faulkner |
QSTR
Не используйте в производственных средах. Эта функциональность находится в техническом превью и может быть изменена или удалена в будущих релизах. Elastic будет работать над устранением проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
Синтаксис
Параметры
-
query - Строка запроса в формате Lucene query string.
Описание
Выполняет запрос по строке. Возвращает true, если заданная строка запроса соответствует строке.
Поддерживаемые типы
| запрос | результат |
|---|---|
ключевое слово | булево |
текст | булево |
Пример
FROM books
| WHERE QSTR("author: Faulkner")
| KEEP book_no, author
| SORT book_no
| LIMIT 5; | book_no:ключевое слово | author:текст |
|---|---|
2378 | [Carol Faulkner, Holly Byers Ochoa, Lucretia Mott] |
2713 | William Faulkner |
2847 | Colleen Faulkner |
2883 | William Faulkner |
3293 | Danny Faulkner |
Пространственные функции ES|QL
ES|QL поддерживает следующие пространственные функции:
ST_DISTANCE
Синтаксис
Параметры
-
geomA - Выражение типа
geo_pointилиcartesian_point. Еслиnull, функция возвращаетnull. -
geomB - Выражение типа
geo_pointилиcartesian_point. Еслиnull, функция возвращаетnull. Второй параметр также должен иметь ту же систему координат, что и первый. Это означает, что нельзя комбинировать параметрыgeo_pointиcartesian_point.
Описание
Вычисляет расстояние между двумя точками. Для декартовых геометрий это расстояние по Пифагору в тех же единицах, что и исходные координаты. Для географических геометрий это круговое расстояние по большой окружности в метрах.
Поддерживаемые типы
| geomA | geomB | результат |
|---|---|---|
cartesian_point | cartesian_point | double |
geo_point | geo_point | double |
Пример
FROM airports | WHERE abbrev == "CPH" | EVAL distance = ST_DISTANCE(location, city_location) | KEEP abbrev, name, location, city_location, distance
| аббревиатура | название | местоположение | местоположение_города | расстояние |
|---|---|---|---|---|
CPH | Копенгаген | POINT(12.6493508684508 55.6285017221528) | POINT(12.5683 55.6761) | 7339.573896618216 |
ST_INTERSECTS
Синтаксис
Параметры
-
geomA - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. -
geomB - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. Второй параметр также должен иметь ту же систему координат, что и первый. Это означает, что невозможно объединить параметрыgeo_*иcartesian_*.
Описание
Возвращает значение true, если две геометрии пересекаются. Они пересекаются, если имеют хотя бы одну общую точку, включая внутренние точки (точки на линиях или внутри полигонов). Это обратная функция ST_DISJOINT. В математических терминах: ST_Intersects(A, B) ⇔ A ⋂ B ≠ ∅
Поддерживаемые типы
| geomA | geomB | результат |
|---|---|---|
cartesian_point | cartesian_point | boolean |
cartesian_point | cartesian_shape | boolean |
cartesian_shape | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
geo_point | geo_point | boolean |
geo_point | geo_shape | boolean |
geo_shape | geo_point | boolean |
geo_shape | geo_shape | boolean |
Пример
FROM airports
| WHERE ST_INTERSECTS(location, TO_GEOSHAPE("POLYGON((42 14, 43 14, 43 15, 42 15, 42 14))")) | сокращ.:ключ | город:ключ | местоположение_города:geo_point | страна:ключ | местоположение:geo_point | имя:текст | ранг_масштаба:i | тип:k |
|---|---|---|---|---|---|---|---|
HOD | Аль-Худайда | POINT(42.9511 14.8022) | Йемен | POINT(42.97109630194 14.7552534413725) | Международный аэропорт Худейда | 9 | mid |
ST_DISJOINT
Синтаксис
Параметры
-
geomA - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. -
geomB - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. Второй параметр также должен иметь ту же систему координат, что и первый. Это означает, что объединять параметрыgeo_*иcartesian_*нельзя.
Описание
Возвращает, являются ли две геометрии или геометрические столбцы непересекающимися. Это обратная функция ST_INTERSECTS. В математических терминах: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅
Поддерживаемые типы
| geomA | geomB | результат |
|---|---|---|
cartesian_point | cartesian_point | boolean |
cartesian_point | cartesian_shape | boolean |
cartesian_shape | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
geo_point | geo_point | boolean |
geo_point | geo_shape | boolean |
geo_shape | geo_point | boolean |
geo_shape | geo_shape | boolean |
Пример
FROM airport_city_boundaries
| WHERE ST_DISJOINT(city_boundary, TO_GEOSHAPE("POLYGON((-10 -60, 120 -60, 120 60, -10 60, -10 -60))"))
| KEEP abbrev, airport, region, city, city_location | abbrev:keyword | airport:text | region:text | city:keyword | city_location:geo_point |
|---|---|---|---|---|
ACA | General Juan N Alvarez Int’l | Acapulco de Juárez | Acapulco de Juárez | POINT (-99.8825 16.8636) |
ST_CONTAINS
Синтаксис
Параметры
-
geomA - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. -
geomB - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. Второй параметр также должен иметь ту же систему координат, что и первый. Это означает, что объединять параметрыgeo_*иcartesian_*нельзя.
Описание
Возвращает, содержит ли первая геометрия вторую геометрию. Это обратная функция ST_WITHIN.
Поддерживаемые типы
| geomA | geomB | результат |
|---|---|---|
cartesian_point | cartesian_point | boolean |
cartesian_point | cartesian_shape | boolean |
cartesian_shape | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
geo_point | geo_point | boolean |
geo_point | geo_shape | boolean |
geo_shape | geo_point | boolean |
geo_shape | geo_shape | boolean |
Пример
FROM airport_city_boundaries
| WHERE ST_CONTAINS(city_boundary, TO_GEOSHAPE("POLYGON((109.35 18.3, 109.45 18.3, 109.45 18.4, 109.35 18.4, 109.35 18.3))"))
| KEEP abbrev, airport, region, city, city_location | abbrev:keyword | airport:text | region:text | city:keyword | city_location:geo_point |
|---|---|---|---|---|
SYX | Sanya Phoenix Int’l | 天涯区 | Sanya | POINT(109.5036 18.2533) |
ST_WITHIN
Синтаксис
Параметры
-
geomA - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. -
geomB - Выражение типа
geo_point,cartesian_point,geo_shapeилиcartesian_shape. Еслиnull, функция возвращаетnull. Второй параметр также должен иметь ту же систему координат, что и первый. Это означает, что невозможно объединить параметрыgeo_*иcartesian_*.
Описание
Возвращает, находится ли первая геометрия внутри второй геометрии. Это обратная функция ST_CONTAINS.
Поддерживаемые типы
| geomA | geomB | результат |
|---|---|---|
cartesian_point | cartesian_point | boolean |
cartesian_point | cartesian_shape | boolean |
cartesian_shape | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
geo_point | geo_point | boolean |
geo_point | geo_shape | boolean |
geo_shape | geo_point | boolean |
geo_shape | geo_shape | boolean |
Пример
FROM airport_city_boundaries
| WHERE ST_WITHIN(city_boundary, TO_GEOSHAPE("POLYGON((109.1 18.15, 109.6 18.15, 109.6 18.65, 109.1 18.65, 109.1 18.15))"))
| KEEP abbrev, airport, region, city, city_location | сокращение:ключевое слово | аэропорт:текст | регион:текст | город:ключевое слово | местоположение города:geo_point |
|---|---|---|---|---|
SYX | Международный аэропорт Санья Фёникс | 天涯区 | Санья | POINT(109.5036 18.2533) |
ST_X
Синтаксис
Параметры
-
point - Выражение типа
geo_pointилиcartesian_point. Еслиnull, функция возвращаетnull.
Описание
Извлекает координату x из предоставленной точки. Если точки типа geo_point, это эквивалентно извлечению значения longitude.
Поддерживаемые типы
| точка | результат |
|---|---|
cartesian_point | double |
geo_point | double |
Пример
ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)")
| EVAL x = ST_X(point), y = ST_Y(point) | точка:geo_point | x:double | y:double |
|---|---|---|
POINT(42.97109629958868 14.7552534006536) | 42.97109629958868 | 14.7552534006536 |
ST_Y
Синтаксис
Параметры
-
point - Выражение типа
geo_pointилиcartesian_point. Еслиnull, функция возвращаетnull.
Описание
Извлекает координату y из предоставленной точки. Если точки типа geo_point, это эквивалентно извлечению значения latitude.
Поддерживаемые типы
| point | результат |
|---|---|
cartesian_point | double |
geo_point | double |
Пример
ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)")
| EVAL x = ST_X(point), y = ST_Y(point) | point:geo_point | x:double | y:double |
|---|---|---|
POINT(42.97109629958868 14.7552534006536) | 42.97109629958868 | 14.7552534006536 |
Функции строк ES|QL
ES|QL поддерживает следующие функции строк:
BIT_LENGTH
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает длину строки в битах.
Все строки находятся в кодировке UTF-8, поэтому один символ может занимать несколько байтов.
Поддерживаемые типы
| строка | результат |
|---|---|
ключевое слово | целое число |
текст | целое число |
Пример
FROM airports | WHERE country == "India" | KEEP city | EVAL fn_length = LENGTH(city), fn_bit_length = BIT_LENGTH(city)
| city:ключевое слово | fn_length:целое число | fn_bit_length:целое число |
|---|---|---|
Agwār | 5 | 48 |
Ahmedabad | 9 | 72 |
Bangalore | 9 | 72 |
BYTE_LENGTH
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает длину строки в байтах.
Все строки находятся в кодировке UTF-8, поэтому один символ может занимать несколько байт.
Поддерживаемые типы
| строка | результат |
|---|---|
ключевое слово | целое число |
текст | целое число |
Пример
FROM airports | WHERE country == "India" | KEEP city | EVAL fn_length = LENGTH(city), fn_byte_length = BYTE_LENGTH(city)
| city:ключевое слово | fn_length:целое число | fn_byte_length:целое число |
|---|---|---|
Agwār | 5 | 6 |
Ahmedabad | 9 | 9 |
Bangalore | 9 | 9 |
CONCAT
Синтаксис
Параметры
-
string1 - Строки для конкатенации.
-
string2 - Строки для конкатенации.
Описание
Конкатенирует две или более строки.
Поддерживаемые типы
| string1 | string2 | результат |
|---|---|---|
ключевое слово | ключевое слово | ключевое слово |
ключевое слово | текст | ключевое слово |
текст | ключевое слово | ключевое слово |
текст | текст | ключевое слово |
Пример
FROM employees | KEEP first_name, last_name | EVAL fullname = CONCAT(first_name, " ", last_name)
| first_name:ключевое_слово | last_name:ключевое_слово | fullname:ключевое_слово |
|---|---|---|
Alejandro | McAlpine | Alejandro McAlpine |
Amabile | Gomatam | Amabile Gomatam |
Anneke | Preusig | Anneke Preusig |
ENDS_WITH
Синтаксис
Параметры
-
str - Выражение строки. Если
null, функция возвращаетnull. -
suffix - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает булево значение, указывающее, заканчивается ли строка ключевого слова другой строкой.
Поддерживаемые типы
| str | suffix | результат |
|---|---|---|
ключевое_слово | ключевое_слово | булево |
ключевое_слово | текст | булево |
текст | ключевое_слово | булево |
текст | текст | булево |
Пример
FROM employees | KEEP last_name | EVAL ln_E = ENDS_WITH(last_name, "d")
| last_name:ключевое_слово | ln_E:булево |
|---|---|
Awdeh | false |
Azuma | false |
Baek | false |
Bamford | true |
Bernatsky | false |
FROM_BASE64
Синтаксис
Параметры
-
string - Строка base64.
Описание
Декодирование строки base64.
Поддерживаемые типы
| string | результат |
|---|---|
ключевое_слово | ключевое_слово |
текст | ключевое_слово |
Пример
row a = "ZWxhc3RpYw==" | eval d = from_base64(a)
| a:keyword | d:keyword |
|---|---|
ZWxhc3RpYw== | elastic |
LEFT
Синтаксис
Параметры
-
string - Строка, из которой нужно извлечь подстроку.
-
length - Количество символов для извлечения.
Описание
Возвращает подстроку, содержащую длина символов из строки, начиная с левого края.
Поддерживаемые типы
| строка | длина | результат |
|---|---|---|
ключевое слово | целое число | ключевое слово |
текст | целое число | ключевое слово |
Пример
FROM employees | KEEP last_name | EVAL left = LEFT(last_name, 3) | SORT last_name ASC | LIMIT 5
| last_name:ключевое слово | left:ключевое слово |
|---|---|
Awdeh | Awd |
Azuma | Azu |
Baek | Bae |
Bamford | Bam |
Bernatsky | Ber |
LENGTH
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает длину строки в символах.
Все строки находятся в кодировке UTF-8, поэтому один символ может занимать несколько байт.
Поддерживаемые типы
| строка | результат |
|---|---|
ключевое слово | целое число |
текст | целое число |
Пример
FROM airports | WHERE country == "India" | KEEP city | EVAL fn_length = LENGTH(city)
| city:ключевое слово | fn_length:целое число |
|---|---|
Agwār | 5 |
Ahmedabad | 9 |
Bangalore | 9 |
LOCATE
Синтаксис
Параметры
-
string - Входная строка
-
substring - Подстрока для поиска во входной строке
-
start - Индекс начала поиска
Описание
Возвращает целое число, указывающее позицию подстроки-ключа в другой строке. Возвращает 0, если подстрока не найдена. Обратите внимание, что позиции строк начинаются с 1.
Поддерживаемые типы
| строка | подстрока | начало | результат |
|---|---|---|---|
ключевое слово | ключевое слово | целое число | целое число |
ключевое слово | ключевое слово | целое число | |
ключевое слово | текст | целое число | целое число |
ключевое слово | текст | целое число | |
текст | ключевое слово | целое число | целое число |
текст | ключевое слово | целое число | |
текст | текст | целое число | целое число |
текст | текст | целое число |
Пример
row a = "hello" | eval a_ll = locate(a, "ll")
| a:ключевое слово | a_ll:целое число |
|---|---|
hello | 3 |
LTRIM
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull.
Описание
Удаляет начальные пробелы из строки.
Поддерживаемые типы
| строка | результат |
|---|---|
ключевое слово | ключевое слово |
текст | ключевое слово |
Пример
ROW message = " some text ", color = " red "
| EVAL message = LTRIM(message)
| EVAL color = LTRIM(color)
| EVAL message = CONCAT("'", message, "'")
| EVAL color = CONCAT("'", color, "'") | message:ключевое слово | цвет:ключевое слово |
|---|---|
'некоторое текст ' | 'красный ' |
REPEAT
Синтаксис
Параметры
-
string - Строковое выражение.
-
number - Количество повторений.
Описание
Возвращает строку, образованную конкатенацией string с самой собой заданное number количество раз.
Поддерживаемые типы
| строка | число | результат |
|---|---|---|
ключевое слово | целое число | ключевое слово |
текст | целое число | ключевое слово |
Пример
ROW a = "Hello!" | EVAL triple_a = REPEAT(a, 3);
| a:ключевое слово | triple_a:ключевое слово |
|---|---|
Привет! | Привет!Привет!Привет! |
REPLACE
Синтаксис
Параметры
-
string - Строковое выражение.
-
regex - Регулярное выражение.
-
newString - Строка замены.
Описание
Функция заменяет в строке str все совпадения регулярного выражения regex на строку замены newStr.
Поддерживаемые типы
| строка | регулярное выражение | новая строка | результат |
|---|---|---|---|
ключевое слово | ключевое слово | ключевое слово | ключевое слово |
ключевое слово | ключевое слово | текст | ключевое слово |
ключевое слово | текст | ключевое слово | ключевое слово |
ключевое слово | текст | текст | ключевое слово |
текст | ключевое слово | ключевое слово | ключевое слово |
текст | ключевое слово | текст | ключевое слово |
текст | текст | ключевое слово | ключевое слово |
текст | текст | текст | ключевое слово |
Пример
В этом примере любое вхождение слова "World" заменяется на слово "Universe":
ROW str = "Hello World" | EVAL str = REPLACE(str, "World", "Universe") | KEEP str
| str:ключевое слово |
|---|
Привет Вселенная |
REVERSE
Синтаксис
Параметры
-
str - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает новую строку, представляющую входную строку в обратном порядке.
Если Elasticsearch работает с версией JDK меньше 20, то это не будет правильно инвертировать кластеры графем. Elastic Cloud использует более новые версии JDK. Но если вы явно перешли к более старой версии jdk, то увидите, что такие символы, как "👍🏽😊" будут обработаны как "🏽👍😊" вместо корректного "😊👍🏽".
Поддерживаемые типы
| str | результат |
|---|---|
ключевое слово | ключевое слово |
текст | ключевое слово |
Примеры
ROW message = "Some Text" | EVAL message_reversed = REVERSE(message);
| сообщение:ключевое слово | сообщение_обратное:ключевое слово |
|---|---|
Некоторая Текст | txeT emoS |
REVERSE работает и с юникодом! Он сохраняет кластеры юникод-графем вместе при инвертировании.
ROW bending_arts = "💧🪨🔥💨" | EVAL bending_arts_reversed = REVERSE(bending_arts);
| bending_arts:ключевое слово | bending_arts_обратное:ключевое слово |
|---|---|
💧🪨🔥💨 | 💨🔥🪨💧 |
RIGHT
Синтаксис
Параметры
-
string - Строка, из которой нужно вернуть подстроку.
-
length - Количество символов для возврата.
Описание
Возвращает подстроку, содержащую длина символов из строка, начиная справа.
Поддерживаемые типы
| строка | длина | результат |
|---|---|---|
ключевое слово | целое число | ключевое слово |
текст | целое число | ключевое слово |
Пример
FROM employees | KEEP last_name | EVAL right = RIGHT(last_name, 3) | SORT last_name ASC | LIMIT 5
| last_name:ключевое слово | right:ключевое слово |
|---|---|
Awdeh | deh |
Azuma | uma |
Baek | aek |
Bamford | ord |
Bernatsky | sky |
RTRIM
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull.
Описание
Удаляет пробелы в конце строки.
Поддерживаемые типы
| строка | результат |
|---|---|
ключевое слово | ключевое слово |
текст | ключевое слово |
Пример
ROW message = " some text ", color = " red "
| EVAL message = RTRIM(message)
| EVAL color = RTRIM(color)
| EVAL message = CONCAT("'", message, "'")
| EVAL color = CONCAT("'", color, "'") | message:ключевое слово | color:ключевое слово |
|---|---|
' some text' | ' red' |
SPACE
Синтаксис
Параметры
-
number - Количество пробелов в результате.
Описание
Возвращает строку, состоящую из number пробелов.
Поддерживаемые типы
| число | результат |
|---|---|
целое число | ключевое слово |
Пример
ROW message = CONCAT("Hello", SPACE(1), "World!"); | message:ключевое слово |
|---|
Привет Мир! |
SPLIT
Синтаксис
Параметры
-
string - Выражение строки. Если
null, функция возвращаетnull. -
delim - Разделитель. В настоящее время поддерживаются только разделители с одним байтом.
Описание
Разделяет строку со значением на несколько строк.
Поддерживаемые типы
| строка | разделитель | результат |
|---|---|---|
ключевое слово | ключевое слово | ключевое слово |
ключевое слово | текст | ключевое слово |
текст | ключевое слово | ключевое слово |
текст | текст | ключевое слово |
Пример
ROW words="foo;bar;baz;qux;quux;corge" | EVAL word = SPLIT(words, ";")
| words:ключевое слово | word:ключевое слово |
|---|---|
foo;bar;baz;qux;quux;corge | [foo,bar,baz,qux,quux,corge] |
STARTS_WITH
Синтаксис
Параметры
-
str - Выражение строки. Если
null, функция возвращаетnull. -
prefix - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает булево значение, указывающее, начинается ли строка ключевого слова с другой строки.
Поддерживаемые типы
| str | prefix | result |
|---|---|---|
ключевое слово | ключевое слово | булево |
ключевое слово | текст | булево |
текст | ключевое слово | булево |
текст | текст | булево |
Пример
FROM employees | KEEP last_name | EVAL ln_S = STARTS_WITH(last_name, "B")
| last_name:ключевое слово | ln_S:булево |
|---|---|
Awdeh | false |
Azuma | false |
Baek | true |
Bamford | true |
Bernatsky | true |
SUBSTRING
Синтаксис
Параметры
-
string - Строковое выражение. Если
null, функция возвращаетnull. -
start - Начальная позиция.
-
length - Длина подстроки от начальной позиции. Необязательно; если опущено, возвращаются все позиции после
start.
Описание
Возвращает подстроку строки, заданную начальной позицией и необязательной длиной.
Поддерживаемые типы
| строка | начало | длина | результат |
|---|---|---|---|
ключевое слово | целое число | целое число | ключевое слово |
текст | целое число | целое число | ключевое слово |
Примеры
В этом примере возвращаются первые три символа каждой фамилии:
FROM employees | KEEP last_name | EVAL ln_sub = SUBSTRING(last_name, 1, 3)
| last_name:ключевое слово | ln_sub:ключевое слово |
|---|---|
Awdeh | Awd |
Azuma | Azu |
Baek | Bae |
Bamford | Bam |
Bernatsky | Ber |
Отрицательная начальная позиция интерпретируется как относительная к концу строки. Этот пример возвращает последние три символа каждой фамилии:
FROM employees | KEEP last_name | EVAL ln_sub = SUBSTRING(last_name, -3, 3)
| last_name:keyword | ln_sub:keyword |
|---|---|
Awdeh | deh |
Azuma | uma |
Baek | aek |
Bamford | ord |
Bernatsky | sky |
Если длина опущена, подстрока возвращает остаток строки. Этот пример возвращает все символы, кроме первого:
FROM employees | KEEP last_name | EVAL ln_sub = SUBSTRING(last_name, 2)
| last_name:keyword | ln_sub:keyword |
|---|---|
Awdeh | wdeh |
Azuma | zuma |
Baek | aek |
Bamford | amford |
Bernatsky | ernatsky |
TO_BASE64
Синтаксис
Параметры
-
string - Строка.
Описание
Кодирует строку в строку base64.
Поддерживаемые типы
| string | результат |
|---|---|
keyword | keyword |
text | keyword |
Пример
row a = "elastic" | eval e = to_base64(a)
| a:keyword | e:keyword |
|---|---|
elastic | ZWxhc3RpYw== |
TO_LOWER
Синтаксис
Параметры
-
str - Выражение строки. Если
null, функция возвращаетnull.
Описание
Возвращает новую строку, представляющую строку ввода, преобразованную в нижний регистр.
Поддерживаемые типы
| str | результат |
|---|---|
keyword | keyword |
text | keyword |
Пример
ROW message = "Some Text" | EVAL message_lower = TO_LOWER(message)
| message:keyword | message_lower:keyword |
|---|---|
Текст | текст |
TO_UPPER
Синтаксис
Параметры
-
str - Строковое выражение. Если
null, функция возвращаетnull.
Описание
Возвращает новую строку, представляющую входную строку, преобразованную в верхний регистр.
Поддерживаемые типы
| str | результат |
|---|---|
ключевое слово | ключевое слово |
текст | ключевое слово |
Пример
ROW message = "Some Text" | EVAL message_upper = TO_UPPER(message)
| message:keyword | message_upper:keyword |
|---|---|
Текст | ТЕКСТ |
TRIM
Синтаксис
Параметры
-
string - Строковое выражение. Если
null, функция возвращаетnull.
Описание
Удаляет начальные и конечные пробелы из строки.
Поддерживаемые типы
| string | результат |
|---|---|
ключевое слово | ключевое слово |
текст | ключевое слово |
Пример
ROW message = " some text ", color = " red " | EVAL message = TRIM(message) | EVAL color = TRIM(color)
| message:s | color:s |
|---|---|
некоторый текст | красный |
Функции преобразования типов ES|QL
ES|QL поддерживает неявное приведение типов из строковых литералов к определенным типам данных. Подробности см. в разделе неявное приведение типов.
ES|QL поддерживает следующие функции преобразования типов:
-
TO_BOOLEAN -
TO_CARTESIANPOINT -
TO_CARTESIANSHAPE - [preview] Данная функциональность находится в стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
TO_DATEPERIOD -
TO_DATETIME -
TO_DEGREES -
TO_DOUBLE -
TO_GEOPOINT -
TO_GEOSHAPE -
TO_INTEGER -
TO_IP -
TO_LONG -
TO_RADIANS -
TO_STRING - [preview] Данная функциональность находится в стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
TO_TIMEDURATION - [preview] Данная функциональность находится в стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA.
TO_UNSIGNED_LONG -
TO_VERSION
TO_BOOLEAN
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в булево значение. Строковое значение true будет преобразовано в булево true без учета регистра. Для всех других значений, включая пустую строку, функция вернет false. Числовое значение 0 будет преобразовано в false, любое другое значение — в true.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
double | boolean |
integer | boolean |
keyword | boolean |
long | boolean |
text | boolean |
unsigned_long | boolean |
Пример
ROW str = ["true", "TRuE", "false", "", "yes", "1"] | EVAL bool = TO_BOOLEAN(str)
| str:keyword | bool:boolean |
|---|---|
["true", "TRuE", "false", "", "yes", "1"] | [true, true, false, false, false, false] |
TO_CARTESIANPOINT
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в значение cartesian_point. Строка будет преобразована успешно только в том случае, если она соответствует формату WKT Point.
Поддерживаемые типы
| поле | результат |
|---|---|
cartesian_point | cartesian_point |
keyword | cartesian_point |
text | cartesian_point |
Пример
ROW wkt = ["POINT(4297.11 -1475.53)", "POINT(7580.93 2272.77)"] | MV_EXPAND wkt | EVAL pt = TO_CARTESIANPOINT(wkt)
| wkt:keyword | pt:cartesian_point |
|---|---|
"POINT(4297.11 -1475.53)" | POINT(4297.11 -1475.53) |
"POINT(7580.93 2272.77)" | POINT(7580.93 2272.77) |
TO_CARTESIANSHAPE
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в значение cartesian_shape. Строка будет преобразована успешно только в том случае, если она соответствует формату WKT.
Поддерживаемые типы
| поле | результат |
|---|---|
cartesian_point | cartesian_shape |
cartesian_shape | cartesian_shape |
ключевое слово | cartesian_shape |
текст | cartesian_shape |
Пример
ROW wkt = ["POINT(4297.11 -1475.53)", "POLYGON ((3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97))"] | MV_EXPAND wkt | EVAL geom = TO_CARTESIANSHAPE(wkt)
| wkt:ключевое слово | geom:cartesian_shape |
|---|---|
"POINT(4297.11 -1475.53)" | POINT(4297.11 -1475.53) |
"POLYGON 3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97" | POLYGON 3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97 |
TO_DATEPERIOD
Синтаксис
Параметры
-
field - Входное значение. Вход — это корректное выражение константы периода даты.
Описание
Преобразует входное значение в значение date_period.
Поддерживаемые типы
| поле | результат |
|---|---|
date_period | date_period |
ключевое слово | date_period |
текст | date_period |
Пример
row x = "2024-01-01"::datetime | eval y = x + "3 DAYS"::date_period, z = x - to_dateperiod("3 days"); | x:datetime | y:datetime | z:datetime |
|---|---|---|
2024-01-01 | 2024-01-04 | 2023-12-29 |
TO_DATETIME
Синтаксис
Параметры
-
field - Входное значение. Вход может быть столбцом с одним или несколькими значениями или выражением.
Описание
Преобразует входное значение в значение даты. Строка будет преобразована только в том случае, если она соответствует формату yyyy-MM-dd'T'HH:mm:ss.SSS'Z'. Для преобразования дат в других форматах используйте DATE_PARSE.
Обратите внимание, что при преобразовании из разрешения в наносекундах в разрешение в миллисекундах с помощью этой функции наносекундное значение даты усекается, а не округляется.
Поддерживаемые типы
| поле | результат |
|---|---|
date | дата |
date_nanos | дата |
double | дата |
integer | дата |
keyword | дата |
long | дата |
text | дата |
unsigned_long | дата |
Примеры
ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"] | EVAL datetime = TO_DATETIME(string)
| строка:ключевое слово | дата и время:дата |
|---|---|
["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"] | [1953-09-02T00:00:00.000Z, 1964-06-02T00:00:00.000Z] |
Обратите внимание, что в этом примере последнее значение в исходном многозначном поле не было преобразовано. Причина в том, что если формат даты не соблюдается, преобразование приведет к значению null. В этом случае в ответ добавляется заголовок Предупреждение. Заголовок предоставит информацию об источнике ошибки:
"Line 1:112: evaluation of [TO_DATETIME(string)] failed, treating result as null. "Only first 20 failures recorded."
Следующий заголовок будет содержать причину ошибки и нарушающее значение:
"java.lang.IllegalArgumentException: failed to parse date field [1964-06-02 00:00:00]
with format [yyyy-MM-dd'T'HH:mm:ss.SSS'Z']"
Если входной параметр имеет числовой тип, его значение будет интерпретировано как миллисекунды с момента эпохи Unix. Например:
ROW int = [0, 1] | EVAL dt = TO_DATETIME(int)
| int:целое число | dt:дата |
|---|---|
[0, 1] | [1970-01-01T00:00:00.000Z, 1970-01-01T00:00:00.001Z] |
TO_DEGREES
Синтаксис
Параметры
-
number - Входное значение. Вход может быть одиночной или многозначной колонкой или выражением.
Описание
Преобразует число в радианах в градусы.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
целое число | double |
long | double |
unsigned_long | double |
Пример
ROW rad = [1.57, 3.14, 4.71] | EVAL deg = TO_DEGREES(rad)
| рад:double | град:double |
|---|---|
[1.57, 3.14, 4.71] | [89.95437383553924, 179.9087476710785, 269.86312150661774] |
TO_DOUBLE
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в значение типа double. Если входной параметр имеет тип даты, его значение будет интерпретировано как миллисекунды с момента эпохи Unix, преобразованные в double. Булево значение true будет преобразовано в double 1.0, а false — в 0.0.
Поддерживаемые типы
| field | результат |
|---|---|
boolean | double |
counter_double | double |
counter_integer | double |
counter_long | double |
date | double |
double | double |
integer | double |
keyword | double |
long | double |
text | double |
unsigned_long | double |
Пример
ROW str1 = "5.20128E11", str2 = "foo"
| EVAL dbl = TO_DOUBLE("520128000000"), dbl1 = TO_DOUBLE(str1), dbl2 = TO_DOUBLE(str2) | str1:keyword | str2:keyword | dbl:double | dbl1:double | dbl2:double |
|---|---|---|---|---|
5.20128E11 | foo | 5.20128E11 | 5.20128E11 | null |
Обратите внимание, что в данном примере последнее преобразование строки невозможно. В этом случае результатом будет значение null. В таком случае в ответ добавляется заголовок Warning. Заголовок предоставит информацию о причине сбоя:
"Line 1:115: evaluation of [TO_DOUBLE(str2)] failed, treating result as null. Only first 20 failures recorded."
Следующий заголовок будет содержать причину сбоя и нарушающее значение: "java.lang.NumberFormatException: For input string: "foo""
TO_GEOPOINT
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в значение типа geo_point. Строка будет успешно преобразована только в том случае, если она соответствует формату WKT Point.
Поддерживаемые типы
| поле | результат |
|---|---|
geo_point | geo_point |
ключевое слово | geo_point |
текст | geo_point |
Пример
ROW wkt = "POINT(42.97109630194 14.7552534413725)" | EVAL pt = TO_GEOPOINT(wkt)
| wkt:ключевое слово | pt:geo_point |
|---|---|
"POINT(42.97109630194 14.7552534413725)" | POINT(42.97109630194 14.7552534413725) |
TO_GEOSHAPE
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в значение типа geo_shape. Строка будет преобразована успешно только в том случае, если она соответствует формату WKT.
Поддерживаемые типы
| поле | результат |
|---|---|
geo_point | geo_shape |
geo_shape | geo_shape |
ключевое слово | geo_shape |
текст | geo_shape |
Пример
ROW wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))" | EVAL geom = TO_GEOSHAPE(wkt)
| wkt:ключевое слово | geom:geo_shape |
|---|---|
"POLYGON 30 10, 40 40, 20 40, 10 20, 30 10" | POLYGON 30 10, 40 40, 20 40, 10 20, 30 10 |
TO_INTEGER
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входное значение в целое число. Если входной параметр имеет тип даты, его значение будет интерпретировано как миллисекунды с момента эпохи Unix, преобразованные в целое число. Булево true будет преобразовано в целое число 1, false в 0.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | целое число |
counter_integer | целое число |
date | целое число |
double | целое число |
integer | целое число |
keyword | целое число |
long | целое число |
text | целое число |
unsigned_long | целое число |
Пример
ROW long = [5013792, 2147483647, 501379200000] | EVAL int = TO_INTEGER(long)
| long:long | int:целое число |
|---|---|
[5013792, 2147483647, 501379200000] | [5013792, 2147483647] |
Обратите внимание, что в этом примере последнее значение многозначного поля не может быть преобразовано в целое число. В этом случае результатом является значение null. В этом случае в ответ добавляется заголовок Warning. Заголовок предоставит информацию о причине сбоя:
"Line 1:61: evaluation of [TO_INTEGER(long)] failed, treating result as null. Only first 20 failures recorded."
Следующий заголовок будет содержать причину сбоя и нарушающее значение:
"org.elasticsearch.xpack.esql.core.InvalidArgumentException: [501379200000] out of [integer] range"
TO_IP
Синтаксис
Параметры
-
field - Входное значение. Вход может быть однозначным или многозначным столбцом или выражением.
Описание
Преобразует строку ввода в значение IP.
Поддерживаемые типы
| поле | результат |
|---|---|
ip | ip |
keyword | ip |
text | ip |
Пример
ROW str1 = "1.1.1.1", str2 = "foo" | EVAL ip1 = TO_IP(str1), ip2 = TO_IP(str2) | WHERE CIDR_MATCH(ip1, "1.0.0.0/8")
| str1:keyword | str2:keyword | ip1:ip | ip2:ip |
|---|---|---|---|
1.1.1.1 | foo | 1.1.1.1 | null |
Обратите внимание, что в этом примере последнее преобразование строки невозможно. В этом случае результатом является значение null. В этом случае в ответ добавляется заголовок Warning. Заголовок предоставит информацию о причине сбоя:
"Line 1:68: evaluation of [TO_IP(str2)] failed, treating result as null. Only first 20 failures recorded."
Следующий заголовок будет содержать причину сбоя и нарушающее значение:
"java.lang.IllegalArgumentException: 'foo' is not an IP string literal."
TO_LONG
Синтаксис
Параметры
-
field - Входное значение. Вход может быть одно- или многознаковым столбцом или выражением.
Описание
Преобразует входное значение в значение типа long. Если входной параметр имеет тип даты, его значение будет интерпретировано как миллисекунды с момента эпохи Unix, преобразованные в long. Логическое значение true будет преобразовано в long 1, false — в 0.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | long |
counter_integer | long |
counter_long | long |
date | long |
date_nanos | long |
double | long |
integer | long |
keyword | long |
long | long |
text | long |
unsigned_long | long |
Пример
ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" | EVAL long1 = TO_LONG(str1), long2 = TO_LONG(str2), long3 = TO_LONG(str3)
| str1:keyword | str2:keyword | str3:keyword | long1:long | long2:long | long3:long |
|---|---|---|---|---|---|
2147483648 | 2147483648.2 | foo | 2147483648 | 2147483648 | null |
Обратите внимание, что в данном примере последнее преобразование строки невозможно. В этом случае результат — значение null. В таком случае в ответ добавляется заголовок Warning. Заголовок предоставит информацию о источнике сбоя:
"Line 1:113: evaluation of [TO_LONG(str3)] failed, treating result as null. Only first 20 failures recorded."
Следующий заголовок будет содержать причину сбоя и проблемное значение:
"java.lang.NumberFormatException: For input string: "foo""
TO_RADIANS
Синтаксис
Параметры
-
number - Входное значение. Вход может быть одно- или многознаковым столбцом или выражением.
Описание
Преобразует число в градусах в радианы.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW deg = [90.0, 180.0, 270.0] | EVAL rad = TO_RADIANS(deg)
| deg:double | rad:double |
|---|---|
[90.0, 180.0, 270.0] | [1.5707963267948966, 3.141592653589793, 4.71238898038469] |
TO_STRING
Синтаксис
Параметры
-
field - Входное значение. Вход может быть столбцом с одним или несколькими значениями, или выражением.
Описание
Преобразует входное значение в строку.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | ключевое слово |
cartesian_point | ключевое слово |
cartesian_shape | ключевое слово |
date | ключевое слово |
date_nanos | ключевое слово |
double | ключевое слово |
geo_point | ключевое слово |
geo_shape | ключевое слово |
integer | ключевое слово |
ip | ключевое слово |
keyword | ключевое слово |
long | ключевое слово |
text | ключевое слово |
unsigned_long | ключевое слово |
version | ключевое слово |
Примеры
ROW a=10 | EVAL j = TO_STRING(a)
| a:integer | j:keyword |
|---|---|
10 | "10" |
Также работает с многозначными полями:
ROW a=[10, 9, 8] | EVAL j = TO_STRING(a)
| a:integer | j:keyword |
|---|---|
[10, 9, 8] | ["10", "9", "8"] |
TO_TIMEDURATION
Синтаксис
Параметры
-
field - Входное значение. Вход является корректным выражением длительности времени.
Описание
Преобразует входное значение в значение time_duration.
Поддерживаемые типы
| поле | результат |
|---|---|
ключевое слово | продолжительность_времени |
текст | продолжительность_времени |
продолжительность_времени | продолжительность_времени |
Пример
row x = "2024-01-01"::datetime | eval y = x + "3 hours"::time_duration, z = x - to_timeduration("3 hours"); | x:datetime | y:datetime | z:datetime |
|---|---|---|
2024-01-01 | 2024-01-01T03:00:00.000Z | 2023-12-31T21:00:00.000Z |
TO_UNSIGNED_LONG
Синтаксис
Параметры
-
field - Входное значение. Вход может быть столбцом с одиночным или множественным значением или выражением.
Описание
Преобразует входное значение в целое беззнаковое число типа long. Если входной параметр имеет тип даты, его значение будет интерпретировано как миллисекунды, прошедшие с эпохи Unix, и преобразовано в целое беззнаковое число типа long. Булево значение true будет преобразовано в целое беззнаковое число типа long 1, а false - в 0.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | unsigned_long |
дата | unsigned_long |
double | unsigned_long |
целое | unsigned_long |
ключевое слово | unsigned_long |
long | unsigned_long |
текст | unsigned_long |
unsigned_long | unsigned_long |
Пример
ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo" | EVAL long1 = TO_UNSIGNED_LONG(str1), long2 = TO_ULONG(str2), long3 = TO_UL(str3)
| str1:ключевое слово | str2:ключевое слово | str3:ключевое слово | long1:unsigned_long | long2:unsigned_long | long3:unsigned_long |
|---|---|---|---|---|---|
2147483648 | 2147483648.2 | foo | 2147483648 | 2147483648 | null |
Обратите внимание, что в данном примере последнее преобразование строки невозможно. В этом случае результатом является значение null. В этом случае в ответ добавляется заголовок Warning. Заголовок предоставляет информацию о источнике сбоя:
"Line 1:133: evaluation of [TO_UL(str3)] failed, treating result as null. Only first 20 failures recorded."
Следующий заголовок будет содержать причину сбоя и нарушающее значение:
"java.lang.NumberFormatException: Character f is neither a decimal digit number, decimal point,
+ "nor "e" notation exponential mark."
TO_VERSION
Синтаксис
Параметры
-
field - Значение входных данных. Входные данные могут быть одно- или многозначным столбцом или выражением.
Описание
Преобразует входную строку в значение версии.
Поддерживаемые типы
| Поле | Результат |
|---|---|
ключевое слово | версия |
текст | версия |
версия | версия |
Пример
ROW v = TO_VERSION("1.2.3") | v:версия |
|---|
1.2.3 |
Функции ES|QL для многозначных значений
ES|QL поддерживает следующие функции для многозначных значений:
MV_APPEND
Синтаксис
Параметры
-
field1 -
field2
Описание
Объединяет значения двух полей с многозначными данными.
Поддерживаемые типы
| поле1 | поле2 | результат |
|---|---|---|
boolean | boolean | boolean |
cartesian_point | cartesian_point | cartesian_point |
cartesian_shape | cartesian_shape | cartesian_shape |
дата | дата | дата |
double | double | double |
geo_point | geo_point | geo_point |
geo_shape | geo_shape | geo_shape |
integer | integer | integer |
ip | ip | ip |
keyword | keyword | keyword |
long | long | long |
text | text | keyword |
version | version | version |
MV_AVG
Синтаксис
Параметры
-
number - Многозначное выражение.
Описание
Преобразует многозначное поле в однозначное поле, содержащее среднее значение всех значений.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
integer | double |
long | double |
unsigned_long | double |
Пример
ROW a=[3, 5, 1, 6] | EVAL avg_a = MV_AVG(a)
| a:integer | avg_a:double |
|---|---|
[3, 5, 1, 6] | 3.75 |
MV_CONCAT
Синтаксис
Параметры
-
string - Многозначное выражение.
-
delim - Разделитель.
Описание
Преобразует многозначное строковое выражение в столбец с одним значением, содержащий конкатенацию всех значений, разделённых разделителем.
Поддерживаемые типы
| строка | разделитель | результат |
|---|---|---|
ключевое слово | ключевое слово | ключевое слово |
ключевое слово | текст | ключевое слово |
текст | ключевое слово | ключевое слово |
текст | текст | ключевое слово |
Примеры
ROW a=["foo", "zoo", "bar"] | EVAL j = MV_CONCAT(a, ", ")
| a:ключевое слово | j:ключевое слово |
|---|---|
["foo", "zoo", "bar"] | "foo, zoo, bar" |
Для конкатенации столбцов, не являющихся строками, сначала вызовите TO_STRING:
ROW a=[10, 9, 8] | EVAL j = MV_CONCAT(TO_STRING(a), ", ")
| a:целое число | j:ключевое слово |
|---|---|
[10, 9, 8] | "10, 9, 8" |
MV_COUNT
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Преобразует многозначное выражение в столбец с одним значением, содержащий количество значений.
Поддерживаемые типы
| поле | результат |
|---|---|
логический | целое число |
точка в декартовой системе координат | целое число |
геометрическая фигура в декартовой системе координат | целое число |
дата | целое число |
дата с наносекундами | целое число |
двойная точность | целое число |
географическая точка | целое число |
геометрическая фигура | целое число |
целое число | целое число |
IP-адрес | целое число |
ключевое слово | целое число |
длинное целое число | целое число |
текст | целое число |
безопасное целое число | целое число |
версия | целое число |
Пример
ROW a=["foo", "zoo", "bar"] | EVAL count_a = MV_COUNT(a)
| a:keyword | count_a:integer |
|---|---|
["foo", "zoo", "bar"] | 3 |
MV_DEDUPE
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Удаляет дублирующие значения из многозначного поля.
MV_DEDUPE может, но не всегда, сортировать значения в столбце.
Поддерживаемые типы
| field | result |
|---|---|
boolean | boolean |
cartesian_point | cartesian_point |
cartesian_shape | cartesian_shape |
date | date |
date_nanos | date_nanos |
double | double |
geo_point | geo_point |
geo_shape | geo_shape |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
version | version |
Пример
ROW a=["foo", "foo", "bar", "foo"] | EVAL dedupe_a = MV_DEDUPE(a)
| a:keyword | dedupe_a:keyword |
|---|---|
["foo", "foo", "bar", "foo"] | ["foo", "bar"] |
MV_FIRST
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Преобразует многозначное выражение в однозначный столбец, содержащий первое значение. Это наиболее полезно при чтении из функции, которая выдает многозначные столбцы в известном порядке, например, SPLIT.
Порядок, в котором многозначные поля считываются из базового хранилища, не гарантируется. Он часто является возрастающим, но не полагайтесь на это. Если вам нужно минимальное значение, используйте MV_MIN вместо MV_FIRST. MV_MIN имеет оптимизации для отсортированных значений, поэтому нет выгоды в производительности от использования MV_FIRST.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
cartesian_point | cartesian_point |
cartesian_shape | cartesian_shape |
date | date |
date_nanos | date_nanos |
double | double |
geo_point | geo_point |
geo_shape | geo_shape |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
unsigned_long | unsigned_long |
version | version |
Пример
ROW a="foo;bar;baz" | EVAL first_a = MV_FIRST(SPLIT(a, ";"))
| a:keyword | first_a:keyword |
|---|---|
foo;bar;baz | "foo" |
MV_LAST
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Преобразует многозначное выражение в столбец с единственным значением, содержащим последнее значение. Это наиболее полезно при чтении из функции, которая выводит многозначные столбцы в известном порядке, например, SPLIT.
Порядок, в котором многозначные поля считываются из базового хранилища, не гарантируется. Часто он возрастающий, но не полагайтесь на это. Если вам нужно максимальное значение, используйте MV_MAX вместо MV_LAST. MV_MAX имеет оптимизации для отсортированных значений, поэтому нет преимущества в использовании MV_LAST.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
cartesian_point | cartesian_point |
cartesian_shape | cartesian_shape |
date | date |
date_nanos | date_nanos |
double | double |
geo_point | geo_point |
geo_shape | geo_shape |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
unsigned_long | unsigned_long |
version | version |
Пример
ROW a="foo;bar;baz" | EVAL last_a = MV_LAST(SPLIT(a, ";"))
| a:keyword | last_a:keyword |
|---|---|
foo;bar;baz | "baz" |
MV_MAX
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Преобразует многозначное выражение в однозначный столбец, содержащий максимальное значение.
Поддерживаемые типы
| поле | результат |
|---|---|
boolean | boolean |
date | date |
date_nanos | date_nanos |
double | double |
integer | integer |
ip | ip |
keyword | keyword |
long | long |
text | keyword |
unsigned_long | unsigned_long |
version | version |
Примеры
ROW a=[3, 5, 1] | EVAL max_a = MV_MAX(a)
| a:integer | max_a:integer |
|---|---|
[3, 5, 1] | 5 |
Его можно использовать с любым типом столбца, включая keyword столбцы. В этом случае он выбирает последнюю строку, сравнивая их представления в UTF-8 байт за байтом:
ROW a=["foo", "zoo", "bar"] | EVAL max_a = MV_MAX(a)
| a:ключевое слово | max_a:ключевое слово |
|---|---|
["foo", "zoo", "bar"] | "zoo" |
MV_MEDIAN
Синтаксис
Параметры
-
number - Многозначное выражение.
Описание
Преобразует многозначное поле в однозначное поле, содержащее медианное значение.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
целое число | целое число |
long | long |
unsigned_long | unsigned_long |
Примеры
ROW a=[3, 5, 1] | EVAL median_a = MV_MEDIAN(a)
| a:целое число | median_a:целое число |
|---|---|
[3, 5, 1] | 3 |
Если в строке содержится чётное количество значений для столбца, результатом будет среднее арифметическое двух средних значений. Если столбец не является с плавающей точкой, среднее значение округляется вниз:
ROW a=[3, 7, 1, 6] | EVAL median_a = MV_MEDIAN(a)
| a:целое число | median_a:целое число |
|---|---|
[3, 7, 1, 6] | 4 |
MV_MEDIAN_ABSOLUTE_DEVIATION
Синтаксис
Параметры
-
number - Многозначное выражение.
Описание
Преобразует многозначное поле в однозначное поле, содержащее медианное абсолютное отклонение. Оно вычисляется как медиана отклонений каждого значения данных от медианы всего образца. То есть, для случайной величины X медианное абсолютное отклонение равно median(|median(X) - X|).
Если поле содержит чётное количество значений, медианы будут вычисляться как среднее арифметическое двух средних значений. Если значение не является числом с плавающей точкой, средние значения округляются к нулю.
Поддерживаемые типы
| число | результат |
|---|---|
double | double |
целое число | целое число |
long | long |
unsigned_long | unsigned_long |
Пример
ROW values = [0, 2, 5, 6] | EVAL median_absolute_deviation = MV_MEDIAN_ABSOLUTE_DEVIATION(values), median = MV_MEDIAN(values)
| значения:целое | медианное_абсолютное_отклонение:целое | медиана:целое |
|---|---|---|
[0, 2, 5, 6] | 2 | 3 |
MV_MIN
Синтаксис
Параметры
-
field - Многозначное выражение.
Описание
Преобразует многозначное выражение в однозначный столбец, содержащий минимальное значение.
Поддерживаемые типы
| поле | результат |
|---|---|
логический | логический |
дата | дата |
дата_наносекунды | дата_наносекунды |
двойное | двойное |
целое | целое |
ip | ip |
ключевое_слово | ключевое_слово |
длинное | длинное |
текст | ключевое_слово |
безусловное_длинное | безусловное_длинное |
версия | версия |
Примеры
ROW a=[2, 1] | EVAL min_a = MV_MIN(a)
| a:целое | min_a:целое |
|---|---|
[2, 1] | 1 |
Его можно использовать с любым типом столбца, включая keyword столбцы. В этом случае он выбирает первую строку, сравнивая их представления в кодировке utf-8 байт за байтом:
ROW a=["foo", "bar"] | EVAL min_a = MV_MIN(a)
| a:ключевое_слово | min_a:ключевое_слово |
|---|---|
["foo", "bar"] | "bar" |
MV_PERCENTILE
Синтаксис
Параметры
-
number - Многозначное выражение.
-
percentile - Процентиль для вычисления. Должно быть числом от 0 до 100. Значения вне диапазона приведут к возвращению null.
Описание
Преобразует многозначное поле в однозначное поле, содержащее значение, соответствующее определенному процентилю наблюдаемых значений.
Поддерживаемые типы
| число | процентиль | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | integer |
integer | integer | integer |
integer | long | integer |
long | double | long |
long | integer | long |
long | long | long |
Пример
ROW values = [5, 5, 10, 12, 5000] | EVAL p50 = MV_PERCENTILE(values, 50), median = MV_MEDIAN(values)
| значения:integer | p50:integer | медиана:integer |
|---|---|---|
[5, 5, 10, 12, 5000] | 10 | 10 |
MV_PSERIES_WEIGHTED_SUM
Синтаксис
Параметры
-
number - Многозначное выражение.
-
p - Это постоянное число, представляющее параметр p в ряду P. Оно влияет на вклад каждого элемента в взвешенную сумму.
Описание
Преобразует многозначное выражение в однозначный столбец, умножая каждый элемент входного списка на соответствующий член в ряду P и вычисляя сумму.
Поддерживаемые типы
| число | p | результат |
|---|---|---|
double | double | double |
Пример
ROW a = [70.0, 45.0, 21.0, 21.0, 21.0] | EVAL sum = MV_PSERIES_WEIGHTED_SUM(a, 1.5) | KEEP sum
| сумма:double |
|---|
94.45465156212452 |
MV_SLICE
Синтаксис
Параметры
-
field - Многозначное выражение. Если
null, функция возвращаетnull. -
start - Начальная позиция. Если
null, функция возвращаетnull. Аргумент start может быть отрицательным. Индекс -1 используется для указания последнего значения в списке. -
end - Конечная позиция (включительно). Необязательно; если опущено, возвращается позиция по
start. Аргумент end может быть отрицательным. Индекс -1 используется для указания последнего значения в списке.
Описание
Возвращает подмножество многозначного поля, используя начальный и конечный индексы. Это наиболее полезно при чтении из функции, которая генерирует многозначные столбцы в известном порядке, например, SPLIT или MV_SORT.
Порядок чтения многозначных полей из базового хранилища не гарантируется. Часто он является возрастающим, но не полагайтесь на это.
Поддерживаемые типы
| поле | начало | конец | результат |
|---|---|---|---|
boolean | целое число | целое число | boolean |
cartesian_point | целое число | целое число | cartesian_point |
cartesian_shape | целое число | целое число | cartesian_shape |
дата | целое число | целое число | дата |
date_nanos | целое число | целое число | date_nanos |
double | целое число | целое число | double |
geo_point | целое число | целое число | geo_point |
geo_shape | целое число | целое число | geo_shape |
целое число | целое число | целое число | целое число |
ip | целое число | целое число | ip |
keyword | целое число | целое число | keyword |
long | целое число | целое число | long |
text | целое число | целое число | keyword |
версия | целое число | целое число | версия |
Примеры
row a = [1, 2, 2, 3] | eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)
| a:integer | a1:integer | a2:integer |
|---|---|---|
[1, 2, 2, 3] | 2 | [2, 3] |
row a = [1, 2, 2, 3] | eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)
| a:integer | a1:integer | a2:integer |
|---|---|---|
[1, 2, 2, 3] | 2 | [2, 2, 3] |
MV_SORT
Синтаксис
Параметры
-
field - Многозначное выражение. Если
null, функция возвращаетnull. -
order - Порядок сортировки. Допустимые значения ASC и DESC, по умолчанию ASC.
Описание
Сортирует многозначное поле в лексикографическом порядке.
Поддерживаемые типы
| field | order | результат |
|---|---|---|
boolean | keyword | boolean |
date | keyword | date |
date_nanos | keyword | date_nanos |
double | keyword | double |
integer | keyword | integer |
ip | keyword | ip |
keyword | keyword | keyword |
long | keyword | long |
text | keyword | keyword |
version | keyword | version |
Пример
ROW a = [4, 2, -3, 2] | EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")
| a:integer | sa:integer | sd:integer |
|---|---|---|
[4, 2, -3, 2] | [-3, 2, 2, 4] | [4, 2, 2, -3] |
MV_SUM
Синтаксис
Параметры
-
number - Многозначное выражение.
Описание
Преобразует многозначное поле в однозначное, содержащее сумму всех значений.
Поддерживаемые типы
| number | result |
|---|---|
double | double |
integer | integer |
long | long |
unsigned_long | unsigned_long |
Пример
ROW a=[3, 5, 6] | EVAL sum_a = MV_SUM(a)
| a:integer | sum_a:integer |
|---|---|
[3, 5, 6] | 14 |
MV_ZIP
Синтаксис
Параметры
-
string1 - Многозначное выражение.
-
string2 - Многозначное выражение.
-
delim - Разделитель. Необязательный; если опущен,
,используется в качестве разделителя по умолчанию.
Описание
Объединяет значения из двух многозначных полей с разделителем, соединяющим их вместе.
Поддерживаемые типы
| string1 | string2 | delim | result |
|---|---|---|---|
keyword | keyword | keyword | keyword |
keyword | keyword | text | keyword |
keyword | keyword | keyword | |
keyword | text | keyword | keyword |
keyword | text | text | keyword |
keyword | text | keyword | |
text | keyword | keyword | keyword |
text | keyword | text | keyword |
text | keyword | keyword | |
text | text | keyword | keyword |
text | text | text | keyword |
text | text | keyword |
Пример
ROW a = ["x", "y", "z"], b = ["1", "2"] | EVAL c = mv_zip(a, b, "-") | KEEP a, b, c
| a:keyword | b:keyword | c:keyword |
|---|---|---|
[x, y, z] | [1 ,2] | [x-1, y-2, z] |
ES|QL операторы
Булевы операторы для сравнения с одной или несколькими выражениями.
- Двоичные операторы
- Унарные операторы
- Логические операторы
-
IS NULLиIS NOT NULLпредикаты -
Cast (::) -
IN -
LIKE -
RLIKE - [preview] Данная функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA. Операторы поиска
Двоичные операторы
Равенство
Проверка на равенство двух полей. Если какое-либо поле является многозначным, результат равен null.
Это передается в базовый индекс поиска, если одна сторона сравнения является константой, а другая — полем в индексе, которое имеет как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
boolean | boolean | boolean |
cartesian_point | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
date | date | boolean |
date_nanos | date_nanos | boolean |
double | double | boolean |
double | integer | boolean |
double | long | boolean |
geo_point | geo_point | boolean |
geo_shape | geo_shape | boolean |
integer | double | boolean |
integer | integer | boolean |
integer | long | boolean |
ip | ip | boolean |
keyword | keyword | boolean |
keyword | text | boolean |
long | double | boolean |
long | integer | boolean |
long | long | boolean |
text | keyword | boolean |
text | text | boolean |
unsigned_long | unsigned_long | boolean |
version | version | boolean |
Неравенство !=
Проверяет, не равны ли два поля. Если хотя бы одно из полей является множественным, то результат равен null.
Это передаётся в базовый поисковый индекс, если одна сторона сравнения является константой, а другая — полем в индексе, у которого есть как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
boolean | boolean | boolean |
cartesian_point | cartesian_point | boolean |
cartesian_shape | cartesian_shape | boolean |
date | date | boolean |
date_nanos | date_nanos | boolean |
double | double | boolean |
double | integer | boolean |
double | long | boolean |
geo_point | geo_point | boolean |
geo_shape | geo_shape | boolean |
integer | double | boolean |
integer | integer | boolean |
integer | long | boolean |
ip | ip | boolean |
keyword | keyword | boolean |
keyword | text | boolean |
long | double | boolean |
long | integer | boolean |
long | long | boolean |
text | keyword | boolean |
text | text | boolean |
unsigned_long | unsigned_long | boolean |
version | version | boolean |
Меньше чем <
Проверяет, является ли одно поле меньше другого. Если какое-либо поле является многозначным, то результат равен null.
Это передается в базовый поисковый индекс, если одна сторона сравнения является константой, а другая — полем в индексе, у которого есть как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
дата | дата | булево |
date_nanos | date_nanos | булево |
double | double | булево |
double | integer | булево |
double | long | булево |
integer | double | булево |
integer | integer | булево |
integer | long | булево |
ip | ip | булево |
keyword | keyword | булево |
keyword | text | булево |
long | double | булево |
long | integer | булево |
long | long | булево |
text | keyword | булево |
text | text | булево |
unsigned_long | unsigned_long | булево |
version | version | булево |
Меньше или равно <=
Проверка, является ли одно поле меньше или равно другому. Если какое-либо поле является многозначным, то результат — null.
Это передаётся в базовый поисковый индекс, если одна сторона сравнения является константой, а другая — полем в индексе, у которого есть как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
date | date | boolean |
date_nanos | date_nanos | boolean |
double | double | boolean |
double | integer | boolean |
double | long | boolean |
integer | double | boolean |
integer | integer | boolean |
integer | long | boolean |
ip | ip | boolean |
keyword | keyword | boolean |
keyword | text | boolean |
long | double | boolean |
long | integer | boolean |
long | long | boolean |
text | keyword | boolean |
text | text | boolean |
unsigned_long | unsigned_long | boolean |
version | version | boolean |
Больше, чем >
Проверить, больше ли одно поле, чем другое. Если хотя бы одно поле является многозначным, то результат будет null.
Это передаётся в базовый индекс поиска, если одна из сторон сравнения является константой, а другая — полем в индексе, имеющим как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
дата | дата | булево |
date_nanos | date_nanos | булево |
double | double | булево |
double | integer | булево |
double | long | булево |
integer | double | булево |
integer | integer | булево |
integer | long | булево |
ip | ip | булево |
keyword | keyword | булево |
keyword | text | булево |
long | double | булево |
long | integer | булево |
long | long | булево |
text | keyword | булево |
text | text | булево |
unsigned_long | unsigned_long | булево |
version | version | булево |
Больше или равно >=
Проверить, больше ли одно поле, чем другое, или равно ему. Если хотя бы одно поле многозначное, то результат будет null.
Это передается в базовый индекс поиска, если одна сторона сравнения является константой, а другая — полем в индексе, у которого есть как index, так и doc_values.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
дата | дата | логическое |
date_nanos | date_nanos | логическое |
double | double | логическое |
double | integer | логическое |
double | long | логическое |
integer | double | логическое |
integer | integer | логическое |
integer | long | логическое |
ip | ip | логическое |
keyword | keyword | логическое |
keyword | text | логическое |
long | double | логическое |
long | integer | логическое |
long | long | логическое |
text | keyword | логическое |
text | text | логическое |
unsigned_long | unsigned_long | логическое |
version | version | логическое |
Добавление +
Складывает два числа. Если хотя бы одно из полей является многозначным, то результатом является null.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
дата | период_дат | дата |
дата | продолжительность_времени | дата |
период_дат | дата | дата |
период_дат | период_дат | период_дат |
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | integer |
integer | long | long |
long | double | double |
long | integer | long |
long | long | long |
продолжительность_времени | дата | дата |
продолжительность_времени | продолжительность_времени | продолжительность_времени |
unsigned_long | unsigned_long | unsigned_long |
Вычитание -
Вычитание одного числа из другого. Если одно из полей является многозначным, то результат null.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
дата | период_дат | дата |
дата | продолжительность_времени | дата |
период_дат | период_дат | период_дат |
double | double | double |
double | целое | double |
double | длинное | double |
целое | double | double |
целое | целое | целое |
целое | длинное | длинное |
длинное | double | double |
длинное | целое | длинное |
длинное | длинное | длинное |
продолжительность_времени | продолжительность_времени | продолжительность_времени |
безусловное_длинное | безусловное_длинное | безусловное_длинное |
Умножение *
Умножает два числа. Если какое-либо поле является многозначным, то результат будет null.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | integer |
integer | long | long |
long | double | double |
long | integer | long |
long | long | long |
unsigned_long | unsigned_long | unsigned_long |
Деление /
Делит одно число на другое. Если какое-либо поле является многозначным, то результат будет null.
Деление двух целых типов даст целочисленный результат, округляя к нулю. Если вам нужно деление с плавающей точкой, Cast (::) один из аргументов на DOUBLE.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | integer |
integer | long | long |
long | double | double |
long | integer | long |
long | long | long |
unsigned_long | unsigned_long | unsigned_long |
Модуль %
Делит одно число на другое и возвращает остаток. Если любое поле является многозначным, то результат является null.
Поддерживаемые типы:
Поддерживаемые типы
| lhs | rhs | результат |
|---|---|---|
double | double | double |
double | integer | double |
double | long | double |
integer | double | double |
integer | integer | integer |
integer | long | long |
long | double | double |
long | integer | long |
long | long | long |
unsigned_long | unsigned_long | unsigned_long |
Унарные операторы
Единственный унарный оператор — отрицание (-):
Поддерживаемые типы:
Поддерживаемые типы
| поле | результат |
|---|---|
date_period | date_period |
double | double |
integer | integer |
long | long |
time_duration | time_duration |
Логические операторы
Поддерживаются следующие логические операторы:
-
AND -
OR -
NOT
IS NULL и IS NOT NULL предикаты
Для сравнения 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 |
Cast (::)
Оператор :: предоставляет удобный альтернативный синтаксис для функций преобразования типов TO_<type> функций преобразования типов.
ROW ver = CONCAT(("0"::INT + 1)::STRING, ".2.3")::VERSION | версия:версия |
|---|
1.2.3 |
IN
Оператор IN позволяет проверить, равен ли поле или выражение элементу в списке литералов, полей или выражений:
ROW a = 1, b = 4, c = 3 | WHERE c-a IN (3, b / 2, a)
| a:целое | b:целое | c:целое |
|---|---|---|
1 | 4 | 3 |
LIKE
Используйте LIKE для фильтрации данных на основе шаблонов строк с использованием подстановочных знаков. LIKE обычно действует на поле, расположенном в левой части оператора, но также может действовать на константу (литеральное) выражение. Правая часть оператора представляет шаблон.
Поддерживаются следующие символы подстановки:
-
*соответствует нулю или более символам. -
?соответствует одному символу.
Поддерживаемые типы
| строка | шаблон | результат |
|---|---|---|
ключевое слово | ключевое слово | логическое |
текст | текст | логическое |
FROM employees | WHERE first_name LIKE """?b*""" | KEEP first_name, last_name
| имя_первой_буквы:ключевое слово | фамилия:ключевое слово |
|---|---|
Ebbe | Callaway |
Eberhardt | Terkki |
Сопоставление точных символов * и . потребует экранирования. Символ экранирования — обратная косая черта \. Так как обратная косая черта также является специальным символом в строковых литералах, она также потребует дополнительного экранирования.
ROW message = "foo * bar" | WHERE message LIKE "foo \\* bar"
Чтобы уменьшить накладные расходы на экранирование, рекомендуется использовать строки с тройными кавычками """
ROW message = "foo * bar" | WHERE message LIKE """foo \* bar"""
RLIKE
Используйте RLIKE для фильтрации данных на основе строковых шаблонов с помощью регулярных выражений. RLIKE обычно действует на поле, расположенное слева от оператора, но также может действовать на константное (литеральное) выражение. Правая часть оператора представляет собой шаблон.
Поддерживаемые типы
| str | шаблон | результат |
|---|---|---|
ключевое слово | ключевое слово | булево |
текст | текст | булево |
FROM employees | WHERE first_name RLIKE """.leja.*""" | KEEP first_name, last_name
| first_name:ключевое слово | last_name:ключевое слово |
|---|---|
Alejandro | McAlpine |
Сопоставление специальных символов (например, ., *, (…) потребует экранирования. Символ экранирования — обратный слэш \. Поскольку обратный слэш также является специальным символом в строковых литералах, он также потребует дополнительного экранирования.
ROW message = "foo ( bar" | WHERE message RLIKE "foo \\( bar"
Для уменьшения накладных расходов на экранирование рекомендуется использовать строки с тройными кавычками """
ROW message = "foo ( bar" | WHERE message RLIKE """foo \( bar"""
Операторы поиска
Единственный оператор поиска — match (:).
Не используйте в производственных средах. Данная функциональность находится на стадии технического предварительного просмотра и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции на стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.
Оператор match выполняет запрос match на указанном поле. Возвращает true, если предоставленный запрос соответствует строке.
Поддерживаемые типы
| поле | запрос | результат |
|---|---|---|
ключевое слово | ключевое слово | булево |
ключевое слово | текст | булево |
текст | ключевое слово | булево |
текст | текст | булево |
FROM books | WHERE author:"Faulkner" | KEEP book_no, author | SORT book_no | LIMIT 5;
| book_no:ключевое слово | author:текст |
|---|---|
2378 | [Carol Faulkner, Holly Byers Ochoa, Lucretia Mott] |
2713 | William Faulkner |
2847 | Colleen Faulkner |
2883 | William Faulkner |
3293 | Danny Faulkner |
© 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-functions-operators.html