Функции анализа временных рядов
Анализ временных рядов в ClickHouse можно выполнять с помощью стандартных SQL-агрегатных и оконных функций. При работе с данными временных рядов вы обычно столкнетесь с тремя основными типами метрик:
- Метрики счетчиков, которые монотонно увеличиваются с течением времени (например, просмотры страниц или общее количество событий)
- Метрики замера, которые представляют собой точечные измерения, которые могут колебаться вверх и вниз (например, использование CPU или температура)
- Гистограммы, которые выбирают наблюдения и подсчитывают их в ведрах (например, длительности запросов или размеры ответов)
Распространенные шаблоны анализа для этих метрик включают сравнение значений между периодами, вычисление накопительных значений, определение темпов изменения и анализ распределений.
Все это можно достичь с помощью комбинаций агрегаций, оконных функций, таких как sum() OVER
, и специализированных функций, таких как histogram()
.
Изменения между периодами
При анализе данных временных рядов нам часто нужно понять, как изменяются значения между временными периодами.
Это важно как для метрик замера, так и для метрик счетчиков.
Оконная функция lagInFrame
позволяет получить значение предыдущего периода для вычисления этих изменений.
Следующий запрос демонстрирует это, вычисляя изменения в просмотрах с дня на день для страницы Википедии "Weird Al" Yankovic. Столбец тренда показывает, увеличился ли трафик (положительные значения) или уменьшился (отрицательные значения) по сравнению с предыдущим днем, что помогает выявить необычные всплески или падения активности.
Накопительные значения
Метрики счетчиков естественно накапливаются со временем. Чтобы проанализировать этот накопительный рост, мы можем вычислить текущие итоги с использованием оконных функций.
Следующий запрос демонстрирует это: используя клаузу sum() OVER
он создает текущий итог, в то время как функция bar()
предоставляет визуальное представление роста.
Вычисление темпов
При анализе данных временных рядов часто полезно понять темп событий за единицу времени. Этот запрос вычисляет темп просмотров страниц в секунду, деля часовые итоги на количество секунд в часе (3600). Визуальная шкала помогает выявить пиковые часы активности.
Гистограммы
Популярным случаем использования данных временных рядов является создание гистограмм на основе отслеживаемых событий.
Предположим, мы хотим понять распределение количества страниц на основе их общего количества просмотров, включая только страницы, которые имеют более 10 000 просмотров.
Мы можем использовать функцию histogram()
, чтобы автоматически сгенерировать адаптивную гистограмму на основе количества корзин:
Затем мы можем использовать arrayJoin()
, чтобы обработать данные, и bar()
, чтобы визуализировать их: