Learning Platform
Глоссарий Troubleshooting
Урок 14.08 · 15 мин
Продвинутый
summaryadvanced analyticswindowFunnelretentionHNSWTimeSeries

Итоги модуля: Продвинутые аналитические функции

Модуль 13 охватил семь специализированных инструментов ClickHouse для product analytics, когортного анализа, приближённых вычислений, векторного поиска и анализа временных рядов. Уроки провели нас от встроенных агрегатов windowFunnel и sequenceMatch через retention-матрицы и topK до экспериментальных возможностей — HNSW-индексов, TimeSeries engine и нативного Prometheus endpoint.


Ключевые решения проектирования

  1. windowFunnel() для конверсионных воронок (ANLYT-01). windowFunnel(window_seconds)(timestamp, cond1, cond2, ...) возвращает максимальный достигнутый шаг воронки для каждого пользователя. Паттерн: GROUP BY user_id → получить уровень → GROUP BY level для подсчёта пользователей на каждом шаге. Временное окно ограничивает цикл событий: только события внутри window_seconds после первого шага засчитываются. Обязательно GROUP BY user_id — без него все события смешиваются в один агрегат и воронка показывает 100% конверсию.

  2. sequenceMatch()/sequenceCount() для детекции последовательностей (ANLYT-02). Паттерн-синтаксис '(?1).*(?2)' позволяет находить произвольные цепочки событий с временными ограничениями ((?t<=1800) — менее 30 минут между событиями). sequenceMatch возвращает UInt8 (нашли/нет), sequenceCount считает непересекающиеся цепочки. До 32 условий в одном паттерне. Эффективнее самописных JOIN-цепочек за счёт O(N) алгоритма.

  3. retention() для когортных матриц удержания (ANLYT-03). retention(cond1, cond2, ...) возвращает Array(UInt8) — каждый элемент показывает, выполнил ли пользователь условие i при условии, что выполнил условие 1. Паттерн: GROUP BY cohort_week + uid → arraySum(r) / COUNT() для процента удержания. Одна строка на пользователя вместо множества JOIN между когортами.

  4. 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.

  5. 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.

  6. 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 предыдущих периодов в одном запросе.

  7. 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.

TIP

Для закрепления материала рекомендуется выполнить функции windowFunnel, sequenceMatch и retention на реальном ClickHouse сервере (Docker: clickhouse/clickhouse-server:26.3). HNSW (GA с 25.8) и TimeSeries ENGINE (experimental) требуют реального сервера — clickhouse_sim.py не поддерживает их полностью. Лаборатории с примерами данных доступны в репозитории курса в директории labs/analytics/.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 8