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

multivalues

mvappend

Описание: принимает на вход параметры через запятую и возвращает multivalue значение.

Пример:

... | eval res=mvappend(users, "hello", 12, pi())

mvcount

Описание: принимает на вход параметр и возвращает количество записей в multivalue значении.

Пример:

... | stats values(user) as users | eval x=mvcount(users)

mvdedup

Описание: принимает на вход параметр и дедуплицирует значения в multivalue поле.

Пример:

... | eval res=mvappend(users, "user1", "user2"), res=mvdedup(res)

mvfilter

Описание: принимает на вход параметр и фильтрует по булевому признаку.

Пример №1
... | eval res=mvfilter(match(users, "user1"))
Пример №2
... | eval res=mvfilter(in(users, "user1", "user2", "user2"))
Пример №3
... | eval ipa={"10.22.3.2", "192.168.0.1"}, x=mvfilter(cidrmatch("10.0.0.0/8", ipa))
Пример №4
... | eval myval={2, 6, 8, 10}, res=mvfilter(myval > 7)

mvfind

Описание: принимает на вход параметр и возвращает индекс первого найденного совпадения.

В примере res примет значение 2.

Пример №1
... | eval words={"hello", "my", "world"}, res=mvfind(words, "w(.*)")

В примере res примет значение null.

Пример №2
... | eval words={"hello", "my", "world"}, res=mvfind(ipa, "z(.*)")

mvindex

Описание: принимает на вход параметр и номер искомого индекса в multivalue. Возвращает значение или null, если не найдено.

В примере res примет значение my.

Пример №1
... | eval worlds={"hello", "my", "world"}, res=mvindex(worlds, 1)

В примере res примет значение my.

Пример №2
... | eval worlds={"hello", "my", "world"}, res=worlds[1]

mvjoin

Описание: принимает на вход multivalue параметр, значение конкатинатора и возвращает строку со всеми значениями через конкатинатор.

В примере res примет значение "hello OR my OR world".

Пример №1
... | eval words={"hello", "my", "world"}, x=mvjoin(words, " OR ")

mvmap

Описание: перебирает элементы multivalue-поля и применяет к каждому из них заданное выражение. Возвращает multivalue-значение, сформированное из результатов обработки элементов исходного поля.

Синтаксис

... | eval <result_field> = mvmap(<identifier> -> <multivalue_expression>, <map_expression>)
  • <identifier> - имя временной переменной, которой на каждой итерации присваивается очередной элемент multivalue-поля. Имя не должно совпадать с именами полей индекса или идентификаторами, объявленными ранее в запросе
  • <lambda_expression> - multivalue-поле или выражение, вычисления которого является multivalue-значение
  • <expression> - выражение, выполняемое для каждого элемента

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

В примере с помощью функции mvappend создается multivalue-поле response_times_ms. Функция mvindex выбирает из него элементы с индексами от 1 до 2. Затем функция mvmap перебирает выбранные элементы, подставляет каждый из них во временную переменную x и выполняет выражение x * 10.

Итоговое поле res будет содержать значение [2500, 4800].

Пример №1
... | eval response_times_ms = mvappend(120, 250, 480, 900) | eval res = mvmap(x -> mvindex(response_times_ms, 1, 2), x * 10)

В примере с помощью функции mvappend создается multivalue-поле, к которому последовательно применяются функции mvsort и mvdedup. Затем функция mvmap элементы полученного результата и применяет к каждому из них выражение round(pi() * pow(abs(x), 2), 2).

Итоговое поле res будет содержать значение [28.27, 12.57, 50.27, 78.54].

Пример №2
... | eval res = mvmap(x -> mvdedup(mvsort(mvappend(-3, 2, -3, 5, 4))), round(pi() * pow(abs(x), 2), 2))

В примере с помощью функции mvappend создается multivalue-поле score, содержащее числовые значения. Затем функция mvmap перебирает элементы поля и для каждого из них проверяет условие x >= 60.

Итоговое поле res будет содержать значение ["fail", "pass", "pass"].

Пример №3
... | eval score = mvappend(45, 70, 90) | eval res = mvmap(x -> score, if(x >= 60, "pass", "fail"))

mvrange

Описание: принимает на вход параметры начала, конца и интервала инкремента (опционально). Возвращает multivalue поле со списком чисел согласно заданным параметрам.

В примере res примет значение {1,2,3,4,5}.

Пример №1
... | eval res=mvrange(1,5,1)

mvsort

Описание: принимает multivalue параметр и выполняет внутри его сортировку.

В примере res примет значение {"hello", "my", "world"}.

Пример №1
... | eval words={"my", "world", "hello"}, res=mvsort(words)

mvzip

Описание: принимает multivalue параметры и выполняет конкатенацию (через запятые) значений (согласно порядку в индексе multivalue). Если у одного из multivalue параметра значений больше, чем в остальных, конкатинация по этим значениям не будет выполнена.

В примере res примет значение {"user1,1", "user2,2"}.

Пример №1
... | eval myVal={1,2,3}, users={"user2", "user1"}, users=mvsort(users), res=mvzip(users, myVal)

В примере res примет значение {"user1,1", "user2,2", "user3,3"}.

Пример №2
... | eval myVal={1,2,3}, users={"user2", "user3", "user1"}, users=mvsort(users), res=mvzip(users, myVal)

split

Описание: принимает на вход не multivalue строковый параметр, разделитель. Возвращает multivalue поле составленное согласно разделителю.

В примере res примет значение {"hello", "my", "world"}.

Пример №1
... | eval myVal="hello, my, world", res=split(myVal, ",")