foreach
Описание
Команда foreach выполняет подзапросы с шаблоном для перебора следующих элементов:
- Каждое поле, подходящее под wildcard.
- Каждый элемент multivalue.
Синтаксис
foreach mode=(multifield | multivalue)
<wildcard-field-list> | <field>
<subsearch>
Обязательные аргументы
Параметр | Синтаксис | Описание |
---|---|---|
<wildcard-field-list> | [<wildcard>] [<wildcard>]* | Wildcard или список wildcard, разделенных пробелом. Этот параметр доступен только в режиме multifield. |
<field> | <field> | Поле, которое будет использоваться для перебора элементов. Этот параметр доступен только в режиме multivalue. |
<subsearch> | [ subsearch ] | Запрос SML, в котором разрешено использовать только команды where и eval. Должен быть в квадратных скобках. Запрос может содержать шаблоны, зависящие от режима работы команды. |
Шаблоны для подзапроса
Шаблон | Заменяет | Описание |
---|---|---|
<<FIELD>> | Имя поля. | multifield |
<<MATCHSTR>> | Часть имени поля, которая совпадает с wildcard. | multifield |
<<MATCHSEG1>> | Часть имени поля, которая совпадает с первым wildcard. | multifield |
<<MATCHSEG2>> | Часть имени поля, которая совпадает со вторым wildcard. | multifield |
<<MATCHSEG3>> | Часть имени поля, которая совпадает с третьим wildcard. | multifield |
<<ITEM>> | Элемент multivalue. | multivalue |
Опциональные аргументы
Параметр | Синтаксис | По умолчанию | Описание |
---|---|---|---|
<mode> | mode=<mode-name> | multifield | Режим работы foreach. Mutlifield Перебирает одно указанное имя поля или список из нескольких имен полей, которые подходят под wildcard. Multivalue перебирает значения одного multivalue поля. |
Примеры запросов
Пример 1
В данном примере будут выполнены подзапросы для каждого поля, подходящего под wildcard message*
. Каждый подзапрос создаст поле new <<MATCHSTR>>
, где <<MATCHSTR>>
будет заменено на значение, совпадающее с wildcard (Например для message1
будет создано поле new_1
) и присвоит ему значение поля, для которого был вызван подзапрос.
source tweets6
| foreach mode=multifield message* [eval new_<<MATCHSTR>> = <<FIELD>>]
Пример 2
В данном примере в поле sum
будет посчитана сумма значений всех полей, подходящих под wildcard test*
.
| makeresults
| eval test1 = 100, test2 = 200, test3 =300, sum = 0
| foreach test* [eval sum = <<FIELD>> + sum]
Пример 3
В данном примере в поле sum будет посчитана сумма значений всех элементов multivalue поля test
.
| makeresults
| eval test = mvappend(100, 200, 300), sum = 0, total = 0
| foreach mode=multivalue test [eval sum = sum + <<ITEM>>, total = total + 1]
Пример 4
В данном примере останутся записи, у которых все поля, попадающие под wildcard value*
, имеют значение больше 1000
.
source foreach_data
| foreach value* [where <<FIELD>> > 1000]
Пример 5
В данном примере в поле max
будет посчитано максимальное значение среди элементов multivalue поля test
.
| makeresults
| eval test = mvappend(100, 200, 300, 150), max = 0
| foreach mode=multivalue test [eval max = if (max < <<ITEM>>, <<ITEM>>, max)]
Пример 6
В данном примере в каждом запросе создается поле, значение которого складывается из двух сегментов, которые равны части имени поля, попадающей под wildcard. Например, для поля t3t3t6
создастся поле new_336
со значением 36
.
| makeresults
| eval t1t1t1 = 100, t2t2t2 = 200, t3t3t6 =300
| foreach t*t*t* [eval new_<<MATCHSTR>> = <<MATCHSEG1>><<MATCHSEG3>>]