Итоги модуля: Продвинутые аналитические функции
Модуль 13 охватил семь специализированных инструментов ClickHouse для product analytics, когортного анализа, приближённых вычислений, векторного поиска и анализа временных рядов. Уроки провели нас от встроенных агрегатов windowFunnel и sequenceMatch через retention-матрицы и topK до экспериментальных возможностей — HNSW-индексов, TimeSeries engine и нативного Prometheus endpoint.
Ключевые решения проектирования
-
windowFunnel() для конверсионных воронок (ANLYT-01).
windowFunnel(window_seconds)(timestamp, cond1, cond2, ...)возвращает максимальный достигнутый шаг воронки для каждого пользователя. Паттерн: GROUP BY user_id → получить уровень → GROUP BY level для подсчёта пользователей на каждом шаге. Временное окно ограничивает цикл событий: только события внутри window_seconds после первого шага засчитываются. Обязательно GROUP BY user_id — без него все события смешиваются в один агрегат и воронка показывает 100% конверсию. -
sequenceMatch()/sequenceCount() для детекции последовательностей (ANLYT-02). Паттерн-синтаксис
'(?1).*(?2)'позволяет находить произвольные цепочки событий с временными ограничениями ((?t<=1800)— менее 30 минут между событиями).sequenceMatchвозвращает UInt8 (нашли/нет),sequenceCountсчитает непересекающиеся цепочки. До 32 условий в одном паттерне. Эффективнее самописных JOIN-цепочек за счёт O(N) алгоритма. -
retention() для когортных матриц удержания (ANLYT-03).
retention(cond1, cond2, ...)возвращаетArray(UInt8)— каждый элемент показывает, выполнил ли пользователь условие i при условии, что выполнил условие 1. Паттерн: GROUP BY cohort_week + uid → arraySum(r) / COUNT() для процента удержания. Одна строка на пользователя вместо множества JOIN между когортами. -
topK/groupArray/uniqUpTo для product analytics (ANLYT-04).
topK(N)(column)— приближённые top-N значения через heavy hitters алгоритм, память O(N).groupArray(N)(column)— коллектирует до N значений в массив (детерминированно, первые N по порядку).uniqUpTo(N)(column)— возвращает точное число уникальных если ≤ N, иначе N+1: подходит для проверок “не более 100 уникальных клиентов” без полного HyperLogLog. -
HNSW vector similarity (GA с 25.8) для ANN поиска (ANLYT-05).
TYPE vector_similarity('hnsw', 'cosineDistance', dim, 'bf16', M, ef)— граф ближайших соседей для приближённого поиска по векторам (embeddings). Стал GA в ClickHouse 25.8 (vectorSimilarityIndex stable) и доступен в 26.3 LTS — настройкаallow_experimental_vector_similarity_indexбольше не требуется. Двухшаговая активация: ADD INDEX объявляет определение, MATERIALIZE INDEX строит индекс по существующим данным. Несовместим с SELECT…FINAL — для векторного хранения использовать plain MergeTree, не ReplacingMergeTree. Annoy и usearch удалены в 25.6 — заменены наvector_similarity. -
WITH FILL + toStartOfInterval для time-series запросов (ANLYT-06).
ORDER BY hour WITH FILL FROM ... TO ... STEP INTERVAL 1 HOURавтоматически заполняет пробелы в временных рядах нулями или interpolated значениями — без LEFT JOIN с calendar-таблицей.toStartOfInterval(ts, INTERVAL 5 MINUTE)— универсальный bucketing для любого гранулярности.groupArrayMovingSum(N)(column)— скользящая сумма за N предыдущих периодов в одном запросе. -
TimeSeries engine (experimental) + Prometheus native endpoint (ANLYT-07).
ENGINE = TimeSeries— экспериментальный движок с нативной схемой для метрик. Нативный Prometheus endpoint (порт 9363) — GA-функциональность, не требует exporter sidecar:remote_write,remote_readиexpose_metricsнастраиваются в prometheus.xml. PromQL dialect:SET dialect='promql'для использования PromQL-синтаксиса в ClickHouse запросах.
Что дальше
Module 14: Production Operations (Phase 60) — мониторинг, резервное копирование, многотенантность и RBAC в production-средах ClickHouse. После освоения продвинутых аналитических функций (этот модуль) следующий шаг — научиться эксплуатировать кластеры в production: настройка алертинга через нативный Prometheus endpoint (который вы уже изучили), операционный мониторинг, backup strategies, и управление доступом через RBAC.
Для закрепления материала рекомендуется выполнить функции windowFunnel, sequenceMatch и retention на реальном ClickHouse сервере (Docker: clickhouse/clickhouse-server:26.3). HNSW (GA с 25.8) и TimeSeries ENGINE (experimental) требуют реального сервера — clickhouse_sim.py не поддерживает их полностью. Лаборатории с примерами данных доступны в репозитории курса в директории labs/analytics/.