eval
Описание
Выполняет различные операции над данными.
Синтаксис
| eval <field>=<expression>["," <field>=<expression>]...
Обязательные аргументы
Параметр | Синтаксис | Описание |
---|---|---|
field | <string> | Название поле с результатом выполнения операции. |
expression | <expression> | Операция (вычисление) или набор операций (вычислений), которые необходимо выполнить для нового поля. |
Типы данных
eval
оперирует со следующими базовыми типами данных и в ответе стремится сохранить исходный или назначаемый тип данных:
string
numeric
boolean
null
multivalue
multivalue
представляют из себя массивы значений, где каждый элемент - один из базовых типов.
Примеры запросов
Пример 1
Создание поля для классификации статуса операции на основе кода ошибки.
В данном примере система выполняет условную проверку поля errNo
на совпадение условия, в случае совпадения возвращает значение OK
, в случае не совпадения - NOTOK
.
source nix_events-* | eval res = if(errNo == -1, "OK", "NOTOK")
Результатом выполнения запроса может быть следующая таблица:
errNo | res | status |
---|---|---|
-1 | OK | Integer |
"-1" | OK | String |
200 | NOTOK | Integer |
null | NOTOK | null |
Пример 2
В данном примере команда case
классифицирует заказы на основе значения поля total_price
и сохраняет результат в status
.
... | eval status = case(total_price > 3000, "High", total_price > 2000, "Medium", true(), "Low")
Результатом выполнения запроса может быть следующая таблица:
user | total_price | status |
---|---|---|
user1 | 4100 | High |
user2 | 2315 | Medium |
user3 | 828 | Low |
Пример 3
В данном примере система классифицирует события на основе наличия шаблона "учет"
в поле event.action
. Она создает новое поле action_type
, которое принимает значение "account"
, если подстрока найдена, или "auth"
в противном случае.
... | eval action_type = if(like(event.action, "%учет%"), "account", "auth")
Результатом выполнения запроса может быть следующая таблица:
host.name | event.action | action_type |
---|---|---|
SPB | Специальный вход | auth |
MSK | Вход в систему | auth |
VLG | Управление учетными записями | account |
Пример 4
В данном примере система подсчитывает количество товаров в поле items
для каждой записи в наборе данных.
... | eval total_count = mvcount(items)
Результатом выполнения запроса может быть следующая таблица:
user | total_price | items | total_count |
---|---|---|---|
user1 | 4100 | [ "Гирос", "Куриные наггетсы" ] | 2 |
user2 | 2315 | [ "Хот-дог", "Картофель фри сладкий", "Салат Капрезе", "Азиатский салат", "Жареный филе тилапии", "Крабовые котлеты", "Колбаски с перцем", "Куриные тако", "Куриный суп с рисом" ] | 9 |
user3 | 828 | [ "Сэндвич со свининой", "Оладьи", "Сэндвич Рубен" ] | 3 |
Пример 5
Расчет процента успешных операций на основе количества ошибок и общего числа операций для каждого хоста. Функция round
ограничивает результат расчета доли успешных операций в процентах двумя знаками после запятой. Результат записывается в новое поле success_rate
.
... | eval success_rate = round(((total_ops - error_count) / total_ops) * 100, 2)
Результатом выполнения запроса может быть следующая таблица:
host | total_ops | error_count | success_rate |
---|---|---|---|
server1 | 1000 | 50 | 95.00 |
server2 | 800 | 20 | 97.50 |
server3 | 1200 | 120 | 90.00 |
Пример 6
В этом примере создается идентификатор пользователя в формате email
на основе полей user.name
иhost.name
. Функция trim
удаляет символы $SRV
с обеих сторон строки user.name
. Функция replace
использует регулярное выражение, где первая группа захватывает начальную часть имени, а вторая — заглавные буквы в конце. Шаблон замены $1.$2
добавляет точку между группами. Функция lower
приводит результат к нижнему регистру, после чего строка конкатенируется с @
и значением host.name
.
... | eval email = lower(replace(trim(user.name, "$SRV"), "^([a-zA-Z]+)([A-Z]+)([A-Z]+)$", "$1.$2$3")) + "@" + host.name
Результатом выполнения запроса может быть следующая таблица:
user.name | host.name | |
---|---|---|
IvanovAG$SRV | server.local | ivanov.ag@server.local |
PetrovSI$SRV | server.local | petrov.si@server.local |
SidorovMN$SRV | server.local | sidorov.mn@server.local |
Пример 7
Расчет суммарной площади двух окружностей на основе их радиусов
Функция pi()
возвращает значение числа pi
, а функция pow()
возводит значение радиуса в квадрат. Результат суммирования площадей записывается в новое поле total_area
.
... | eval total_area = pi() * pow(radius_a, 2) + pi() * pow(radius_b, 2)
Результатом выполнения запроса может быть следующая таблица:
radius_a | radius_b | total_area |
---|---|---|
3.0 | 4.0 | 78.53981634 |
2.5 | 2.5 | 110.83572895 |
5.0 | 3.5 | 39.26990817 |