ClickHouse курс для аналитика — программа 2026

ClickHouse — самая популярная OLAP БД для аналитики РФ. Используется в Яндекс, Ozon, Wildberries, Авито, VK. На Middle+ собесе обязательно спросят про MergeTree, materialized views, projections. Здесь — структурированный курс из 25 конспектов + 15 практических задач.
Содержание (5 разделов)
  1. 5 спринтов программы
  2. Что делает ClickHouse уникальным
  3. Пример: MergeTree таблица
  4. Materialized View pattern
  5. Когда CH > PostgreSQL

5 спринтов программы

Курс разбит на 5 спринтов по 5 модулей. Каждый спринт — 1-2 недели. К концу курса можешь оптимизировать ClickHouse-запросы и проектировать MergeTree-схемы.

Что делает ClickHouse уникальным

Чем CH отличается от PostgreSQL/Snowflake:

Пример: MergeTree таблица

Базовый pattern таблицы для аналитики событий:

CREATE TABLE events (
  event_date Date,
  event_time DateTime,
  user_id UInt64,
  event_type LowCardinality(String),
  page_url String CODEC(ZSTD(3)),
  duration_ms UInt32 CODEC(Delta, ZSTD(1)),
  properties Map(String, String)
) ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, user_id, event_time)
SETTINGS index_granularity = 8192;

-- Запрос: топ-10 страниц по unique users за вчера
SELECT page_url, uniq(user_id) AS users
FROM events
WHERE event_date = yesterday()
GROUP BY page_url
ORDER BY users DESC
LIMIT 10;
-- Output: < 100мс на таблице с 10М строк

Materialized View pattern

Самый распространённый CH-паттерн — pre-aggregation через MV. Создаём destination table + materialized view.

-- Destination table для агрегатов
CREATE TABLE events_daily (
  event_date Date,
  event_type LowCardinality(String),
  total_events UInt64,
  unique_users AggregateFunction(uniq, UInt64)
) ENGINE = AggregatingMergeTree
ORDER BY (event_date, event_type);

-- Materialized view как trigger
CREATE MATERIALIZED VIEW events_daily_mv TO events_daily AS
SELECT
  event_date,
  event_type,
  count() AS total_events,
  uniqState(user_id) AS unique_users
FROM events
GROUP BY event_date, event_type;

-- Query из агрегата (намного быстрее чем raw events)
SELECT event_date, uniqMerge(unique_users) AS dau
FROM events_daily
WHERE event_date >= today() - 7
GROUP BY event_date
ORDER BY event_date;

Когда CH > PostgreSQL

Чёткий decision-tree какую БД выбрать:

Use caseВыборПочему
Транзакции банкаPostgreSQLOLTP, ACID, нужны точечные UPDATE
Аналитика 100M+ событийClickHouseOLAP, column-store, GROUP BY за секунды
Time-series с asof joinClickHouseASOF JOIN — флагман CH
Real-time дашбордClickHouseMaterialized views, projections
Web-приложение с CRUDPostgreSQLCH плохо в UPDATE/DELETE
Hybrid OLTP/OLAPPG + dbtPG для OLTP, dbt для трансформаций в DW

Частые вопросы

Нужно ли учить CH для Junior?

Зависит от компании. В Яндекс/Ozon/Wildberries — да, для Junior спросят базы CH. В банках/b2b SaaS — нет, там PostgreSQL. Если идёшь в маркетплейс — учи CH.

Чем CH отличается от Snowflake?

Snowflake — облачная OLAP БД с auto-scaling. CH — self-hosted (или managed через Yandex Cloud). CH дешевле, Snowflake удобнее в эксплуатации. На функционале похожи.

Можно ли использовать CH через ORM?

Технически да (sqlalchemy-clickhouse), но не рекомендуется. CH требует знания engine specifics (PREWHERE, materialized views). ORM скрывает это и даёт медленные запросы.

Что такое LowCardinality?

Тип данных для колонок с малым числом уникальных значений (страны, категории). Сжатие 5-10×, чтение быстрее. Аналог dict-encoding в Parquet.

Что такое AggregatingMergeTree?

MergeTree engine с поддержкой агрегатных функций через States (uniqState, sumState). Хранит partial aggregates, при чтении делает Merge. Используется в materialized views для pre-aggregation.

Какие книги по ClickHouse?

Официальная документация clickhouse.com/docs — лучший ресурс. Книг полноценных нет. Habr статьи от Avito/Cian/Yandex — практичные.

Начать практику бесплатно →