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. | 
Опциональные аргументы
| Параметр | Синтаксис | По умолчанию | Описание | 
|---|---|---|---|
| dedup | dedup=<boolean> | false | Указывает, нужно ли убирать дубликаты из данных, которые сравниваются с лукапом. | 
| <execution-type> | type=SOURCE [packsize=<integer>] | FAST | ERGO | DEFAULT | См. Режимы выполнения | 
| lookup-field | <string> | Название поля для сравнения. Могут быть указаны несколько полей. Разделитель между полями запятая. | |
| event-field | <string> | Имя поля в основном результате для сравнения с lookup-field. Используется в случае если названияlookup-fieldиevent-fieldне совпадают. | |
| lookup-destfield | <string> | Имя результирующего поля с полученными из справочника данными. | |
| OUTPUT | OUTPUTNEW | OUTPUT | OUTPUTNEW | OUTPUT | Индикатор 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] | 3 | 3 | Да | 
| [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] | - | Нет | 
Примеры запросов
source tables
| search database = "hr"
| lookup my_click_db name as database OUTPUT engine
В первом примере для каждого входящего события выполняется сопоставление поля database из события и поля name в каждой строчке справочника. Если эти значения совпали, в событие будет добавлено поле engine, значение которого будет взято из соответствующей строчки справочника. Если в событие уже было поле engine, оно будет перезаписано новым значением.
source tables
| search database = "hr"
| lookup type=SOURCE packsize=5000 my_click_db name as database OUTPUTNEW engine
Во втором примере выполняется аналогичное сопоставление в режиме SOURCE. Это значит что сопоставление будет выполнено средствами хранилища. Параметр packsize=5000 указывает что запросы к хранилищу будут отправляться пачками по 5000. Опция OUTPUTNEW указывает, что поле engine не будет перезаписано, если оно уже есть в событии.