Перейти к основному содержимому
Версия: 5.1

eval

Описание

Выполняет различные операции над данными.

Синтаксис

| eval <field>=<expression>["," <field>=<expression>]...

Обязательные аргументы

ПараметрСинтаксисОписание
field<string>Название поле с результатом выполнения операции.
expression<expression>Операция (вычисление) или набор операций (вычислений), которые необходимо выполнить для нового поля.

Типы данных

eval оперирует со следующими базовыми типами данных и в ответе стремится сохранить исходный или назначаемый тип данных:

  • string
  • numeric
  • boolean
  • null
  • multivalue
к сведению

multivalue представляют из себя массивы значений, где каждый элемент - один из базовых типов.

Примеры запросов

Пример 1

Создание поля для классификации статуса операции на основе кода ошибки.

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

Пример №1
source nix_events-* | eval res = if(errNo == -1, "OK", "NOTOK")

Результатом выполнения запроса может быть следующая таблица:

errNoresstatus
-1OKInteger
"-1"OKString
200NOTOKInteger
nullNOTOKnull

Пример 2

В данном примере команда case классифицирует заказы на основе значения поля total_price и сохраняет результат в status.

Пример №2
... | eval status = case(total_price > 3000, "High", total_price > 2000, "Medium", true(), "Low")

Результатом выполнения запроса может быть следующая таблица:

usertotal_pricestatus
user14100High
user22315Medium
user3828Low

Пример 3

В данном примере система классифицирует события на основе наличия шаблона "учет" в поле event.action. Она создает новое поле action_type, которое принимает значение "account", если подстрока найдена, или "auth" в противном случае.

Пример №3
... | eval action_type = if(like(event.action, "%учет%"), "account", "auth")

Результатом выполнения запроса может быть следующая таблица:

host.nameevent.actionaction_type
SPBСпециальный входauth
MSKВход в системуauth
VLGУправление учетными записямиaccount

Пример 4

В данном примере система подсчитывает количество товаров в поле items для каждой записи в наборе данных.

Пример №4
... | eval total_count = mvcount(items)

Результатом выполнения запроса может быть следующая таблица:

usertotal_priceitemstotal_count
user14100[ "Гирос", "Куриные наггетсы" ]2
user22315[ "Хот-дог", "Картофель фри сладкий", "Салат Капрезе", "Азиатский салат", "Жареный филе тилапии", "Крабовые котлеты", "Колбаски с перцем", "Куриные тако", "Куриный суп с рисом" ]9
user3828[ "Сэндвич со свининой", "Оладьи", "Сэндвич Рубен" ]3

Пример 5

Расчет процента успешных операций на основе количества ошибок и общего числа операций для каждого хоста. Функция round ограничивает результат расчета доли успешных операций в процентах двумя знаками после запятой. Результат записывается в новое поле success_rate.

Пример №5
... | eval success_rate = round(((total_ops - error_count) / total_ops) * 100, 2)

Результатом выполнения запроса может быть следующая таблица:

hosttotal_opserror_countsuccess_rate
server110005095.00
server28002097.50
server3120012090.00

Пример 6

В этом примере создается идентификатор пользователя в формате email на основе полей user.name иhost.name. Функция trim удаляет символы $SRV с обеих сторон строки user.name. Функция replace использует регулярное выражение, где первая группа захватывает начальную часть имени, а вторая — заглавные буквы в конце. Шаблон замены $1.$2 добавляет точку между группами. Функция lower приводит результат к нижнему регистру, после чего строка конкатенируется с @ и значением host.name.

Пример №6
... | eval email = lower(replace(trim(user.name, "$SRV"), "^([a-zA-Z]+)([A-Z]+)([A-Z]+)$", "$1.$2$3")) + "@" + host.name

Результатом выполнения запроса может быть следующая таблица:

user.namehost.nameemail
IvanovAG$SRVserver.localivanov.ag@server.local
PetrovSI$SRVserver.localpetrov.si@server.local
SidorovMN$SRVserver.localsidorov.mn@server.local

Пример 7

Расчет суммарной площади двух окружностей на основе их радиусов Функция pi() возвращает значение числа pi, а функция pow() возводит значение радиуса в квадрат. Результат суммирования площадей записывается в новое поле total_area.

Пример №7
... | eval total_area = pi() * pow(radius_a, 2) + pi() * pow(radius_b, 2)

Результатом выполнения запроса может быть следующая таблица:

radius_aradius_btotal_area
3.04.078.53981634
2.52.5110.83572895
5.03.539.26990817