запустить подзапрос для каждой строки CSV-файла, передавая поле в строке поиска - PullRequest
0 голосов
/ 25 января 2019

Я хочу запустить дополнительный запрос для всех значений в CSV-файле и заменить его на поле в CSV-файле.Я импортировал файл в Splunk в качестве входной таблицы loookup и смог просмотреть поля с помощью запроса inputlookup, но я хочу запустить его со всеми подзапросами, где я получаю максимальное количество за час, за день, за неделю и за месяцБазисный

входной файл - это ids.csv, который содержит около 800 строк и всего один столбец, как показано ниже:

1234,
2345
2346
4567
...

запрос, который я использую:

| inputlookup ids.csv | fields ids as id |  [search index="abc" id "search string here" |bin _time span="1hour" | stats count as maxHour by _time | sort - count | head 1]  |appendcols[search
 index="abc" id "search string here" |bin _time span="1day" | stats count as maxDay by _time | sort - count |head 1 ]|appendcols[search
 index="abc" id "search string here" |bin _time span="1week" | stats count as maxWeek by _time | sort - count | head 1 ]|appendcols[search
 index="abc" id "search string here" |bin _time span="1month" | stats count as maxMonth by _time | sort - count | head 1]

Я не получаю ожидаемых результатов для этого, я ожидаю табличного формата, в котором я получаю счет для каждого временного диапазона с определенным идентификатором, передавая поле id в поисковом подзапросе.

Как я могу решить эту проблему?

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Без активного экземпляра передо мной, чтобы играть с ним, я чувствую, что гораздо более эффективный подход может выглядеть следующим образом:

index="abc" [inputlookup ids.csv | fields ids as id]
| bin _time span=1h | stats count by id _time
| bin _time span=1d | stats max(count) as countHour sum(count) as countDay by id _time
| multireport 
   [ noop ]
   [ bin _time span=1week | stats sum(countDay) as countWeek by id _time ]
   [ bin _time span=1mon | stats sum(countDay) as countMonth by id _time ]
| stats max(count*) as max* by id

Сначала мы выбираем все данные для каждого идентификатора в поиске и используем статистикумы получаем максимальное количество в час в каждый день, и количество в день, используя bin и stats.

Далее мы используем (недокументированную) команду с несколькими отчетами, чтобы преобразовать наш набор результатов из ежедневной статистики, чтобы добавить также еженедельную и ежемесячную статистику.Наконец, мы берем максимальное значение каждого счета, чтобы получить максимальное число часов, дня, недели и месяца по каждому идентификатору в inputlookup.


Теперь, поскольку многоотчетный документ не документирован, и предыдущее использованиеиногда это оказывалось несколько проблематично ... Я бы предложил вместо этого использовать eventstats , например, так:

index="abc" [inputlookup ids.csv | fields ids as id]
| bin _time span=1h | stats count by id _time
| bin _time span=1d | stats max(count) as countHour sum(count) as countDay by id _time
| bin _time as week span=1week | eventstats sum(countDay) as countWeek by id week
| bin _time as month span=1month | eventstats sum(countDay) as countMonth by id month
| stats max(count*) as max* by id

Как и раньше, мы получаем ежедневную статистику, но затем мы можем использоватьas синтаксис команды bin для вычисления недели и месяца для каждого дня и добавления столбца для еженедельных и ежемесячных подсчетов за каждый день.Тогда это та же максимальная функция, что и раньше.

...