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

lookup

Описание

Позволяет получить данные из предопределённого справочника (lookup). Команда выполняет сравнение заданных полей в событии и справочнике. При полном соответствии событие будет обогащено указанными полями из справочника.

Синтаксис

lookup dedup=<boolean> <execution-type> <lookup-name> ( <lookup-field> [AS <event-field>] )... [ OUTPUT | OUTPUTNEW (<lookup-destfield> [AS <event-destfield>] )... ]

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

ПараметрСинтаксисОписание
lookup-name<lookup-name>Имя предопределенного lookup.

Опциональные аргументы

ПараметрСинтаксисПо умолчаниюОписание
dedupdedup=<boolean>falseУказывает, нужно ли убирать дубликаты из данных, которые сравниваются с лукапом.
<execution-type>type=SOURCE [packsize=<integer>] | FAST | ERGODEFAULTСм. Режимы выполнения
lookup-field<string>Название поля для сравнения. Могут быть указаны несколько полей. Разделитель между полями запятая.
event-field<string>Имя поля в основном результате для сравнения с lookup-field. Используется в случае если названия lookup-field и event-field не совпадают.
lookup-destfield<string>Имя результирующего поля с полученными из справочника данными.
OUTPUT | OUTPUTNEWOUTPUT | OUTPUTNEWOUTPUTИндикатор OUTPUT указывает, на то что, существующие данные в поле исходного запроса будут перезаписаны данными из lookup. Индикатор OUTPUTNEW указывает на то, что данные в поле исходного запроса будут перезаписаны, если поле не заполнено, но есть данные для этого поля в lookup.

Режимы выполнения

  • DEFAULT - режим по умолчанию. Рекомендуется использовать только для небольшого потока входящих событий и маленьких лукапов.
  • FAST - оптимизированная по скорости версия стандартного алгоритма. Рекомендуется использовать в большинстве случаев.
  • ERGO - оптимизированная по использованию оперативной памяти версия стандартного алгоритма. Рекомендуется использовать при сравнении по нескольким полям.
  • SOURCE - выполняет сопоставление средствами хранилища. Дополнительно можно указать значение packsize, который определяет размер пачки запросов к хранилищу.
Лимиты при загрузке лукапов

При загрузке в оперативную память лукапов в режимах FAST и ERGO применяется пользовательский лимит Количество запрашиваемых данных. Если размер лукапа превышает этот лимит, его можно повысить или использовать режим SOURCE.

Рекомендации по настройке режима SOURCE

Для типа выполнения SOURCE рекомендуется не ставить большой max_initial_query_len. Параметр packsize указывает на то, по сколько событий будет за один запрос обрабатываться движком в каждой итерации. То есть если max_initial_query_len = 10.000, а packsize = 5.000, то за одну итерацию в 10 тысяч событий будет отправлено два запроса (max_initial_query_len/packsize). Если max_initial_query_len больше 20 тысяч, то рекомендуется выполнять команду с параметром packsize в два или три раза меньше max_initial_query_len.

Работа с multivalue

к сведению

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

При работе команды lookup тип значения multivalue могут принимать как поля из результатов поиска (multivalue слева), так и поля из справочников (multivalue справа). Таким образом, существует три случая, когда команда lookup содержит в себе multivalue:

  • multivalue слева
  • multivalue справа
  • multivalue и слева, и справа

Multivalue-значение слева

Значение из справочника сопоставляется с результатом поиска в случае, если значение из справочника содержится в multivalue-значении результата поиска.

Значение слеваЗначение справаПересечение значенийСопоставление
[1, 2, 3, 4, 5]33Да
[1, 2, 3, 4, 5]6-Нет

Multivalue-значение справа

Значение из справочника сопоставляется с результатом поиска в случае, если результат поиска содержится в multivalue-значении из справочника.

Значение слеваЗначение справаПересечение значенийСопоставление
3[1, 2, 3, 4, 5]3Да
6[1, 2, 3, 4, 5]-Нет

Multivalue-значение и слева, и справа

Значение из справочника с результатом поиска в случае, если пересечение multivalue-значений слева и справа не является пустым

Значение слеваЗначение справаПересечение значенийСопоставление
[1, 2, 3, 4, 5][3][3]Да
[1, 2, 3, 4, 5][1, 2, 5][1, 2, 5]Да
[1, 2, 3, 4, 5][1, 2, 6][1, 2]Да
[1, 2, 3][4, 5, 6]-Нет
[1, 2, 3][4]-Нет

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

Пример №1
source tables
| search database = "hr"
| lookup my_click_db name as database OUTPUT engine

В первом примере для каждого входящего события выполняется сопоставление поля database из события и поля name в каждой строчке справочника. Если эти значения совпали, в событие будет добавлено поле engine, значение которого будет взято из соответствующей строчки справочника. Если в событие уже было поле engine, оно будет перезаписано новым значением.

Пример №2
source tables
| search database = "hr"
| lookup type=SOURCE packsize=5000 my_click_db name as database OUTPUTNEW engine

Во втором примере выполняется аналогичное сопоставление в режиме SOURCE. Это значит что сопоставление будет выполнено средствами хранилища. Параметр packsize=5000 указывает что запросы к хранилищу будут отправляться пачками по 5000. Опция OUTPUTNEW указывает, что поле engine не будет перезаписано, если оно уже есть в событии.