Kibana Timelion: отбор или подзапрос для агрегирования суммы макс.
Предположим, у меня есть следующие данные по ElasticSearch:
@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11
Я собираюсь нарисовать гистограмму даты, которая покажет мне сумму всех max:currentPoints на имя пользователя в час, что позволит сгенерировать следующие данные для построения графика:
August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)
Обычно это делается с помощью подзапроса, извлекающего max(currentPoints) для каждого часа, пользователя, а затем суммируют результаты и агрегируют за час.
Это возможно, например, с Kibana Timelion? Я не могу найти способ достичь этого, используя документацию.
Спасибо алекс
1 ответ
Работая над другим проектом, я наткнулся на ответ, чтобы сделать это в Kibana/Elasticsearch без использования Timelion.
Эта функция называется "Агрегация одноуровневых конвейеров", и в этом случае вы используете совокупность сумм. Вы можете использовать его с любой недавней визуализацией Kibana / Elastic (я использую версию 5.5).
Для набора данных, такого как:
@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11
Где вам нужна почасовая сумма (currentPoints) всех MAX (currentPoints) для userId, в результате чего:
August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)
Ты можешь сделать:
метрический
- Агрегация: агрегация одноуровневых трубопроводов (суммарное ведро)
- Тип агрегации ковша: условия
- Поле Bucket: userId
- Размер корзины: удобное значение, превышающее количество пользователей, если вам нужна полная точность
- Метрическая агрегация: Макс
- Метрическое поле: currentPoints
ведро
- Тип ковшей: Разделенные ряды
- Агрегация ведра: гистограмма даты
- Поле гистограммы: @timestamp
- Интервал гистограммы: ежечасно