Что такое ClickHouse
Коротко
ClickHouse — open-source колоночная БД для аналитики (OLAP). Создана в Яндексе. Используется в:
- Яндекс.Метрика (исходно).
- Cloudflare, Uber, Сбер, Авито.
- Большинство российских стартапов и enterprise.
Зачем: обрабатывать миллиарды строк за секунды.
Колоночное хранение
В обычной БД (PostgreSQL) данные хранятся построчно:
Row 1: [id=1, name='A', amount=100, date='2026-04-01']
Row 2: [id=2, name='B', amount=200, date='2026-04-01']В ClickHouse — по колонкам:
id: [1, 2, 3, 4, ...]
name: ['A', 'B', 'C', 'D', ...]
amount: [100, 200, 150, 80, ...]
date: ['2026-04-01', '2026-04-01', ...]Преимущества
- Быстрая агрегация — для
SUM(amount)читаем только колонку amount. - Лучшее сжатие — повторяющиеся значения в колонке.
- Меньше I/O — не читаем ненужные колонки.
Недостатки
- Медленные UPDATE / DELETE (нужно перезаписывать колонку).
- Плохо для OLTP (одиночные строки).
Когда ClickHouse vs PostgreSQL
PostgreSQL (OLTP)
- Транзакции, заказы, регистрации.
- Часто INSERT / UPDATE / DELETE.
- 10M строк или меньше.
ClickHouse (OLAP)
- Аналитика, дашборды, агрегаты.
- Преимущественно SELECT.
- 100M+ строк, миллиарды.
Особенности SQL
ClickHouse использует SQL, но с расширениями:
Функции
-- Агрегаты
uniq(user_id) -- approximate DISTINCT count(быстро)
uniqExact(user_id) -- точный (медленнее)
quantile(0.95)(x) -- approximate percentile
-- Дата
toStartOfMonth(DATE) -- начало месяца
toMonday(DATE) -- понедельник недели
toYYYYMM(DATE) -- 202604Массивы (native!)
SELECT
user_id,
arrayDistinct(groupArray(product_id)) AS unique_products,
length(arrayDistinct(groupArray(product_id))) AS unique_count
FROM orders
GROUP BY user_id;ARRAY JOIN
-- Развернуть массив в строки (как unnest в Postgres)
SELECT user_id, tag
FROM users
ARRAY JOIN tags AS tag;MergeTree — основной engine
ClickHouse использует разные engines для таблиц. Самый частый — MergeTree:
CREATE TABLE events (
user_id UInt64,
event_time DateTime,
event_name String,
value Float64
) ENGINE = MergeTree()
ORDER BY (user_id, event_time)
PARTITION BY toYYYYMM(event_time);- ORDER BY — primary index, главное для performance.
- PARTITION BY — физическое разбиение (обычно по месяцу).
Если хочется сразу закрепить тему на практике — открой тренажёр в Telegram. 10 минут в день — и синтаксис в пальцах.
Производительность
Типичные числа (на 1 сервере):
- Insert: 1M+ rows/sec.
- Select агрегатов на миллиардах строк: 1–5 секунд.
- Запросы COUNT(*) в реальном времени.
Сравнение (грубо, для агрегата на 100M строк):
- PostgreSQL: 30–60 секунд.
- ClickHouse: 0.5–2 секунды.
Как использовать
Через clickhouse-client
clickhouse-client --query "SELECT COUNT(*) FROM events"Через DBeaver / DataGrip
Стандартные SQL-клиенты поддерживают.
Через Python
from clickhouse_driver import Client
client = Client('localhost')
result = client.execute('SELECT * FROM events LIMIT 10')Особенности для аналитика
Approximate aggregates
-- Точно (медленно)
SELECT count(DISTINCT user_id) FROM events
-- Приближённо (быстро, ошибка < 1%)
SELECT uniq(user_id) FROM eventsДля дашбордов approximate всегда достаточен.
Sampling
SELECT * FROM events SAMPLE 0.1
-- 10% от данных, для быстрого изученияMaterialized Views
ClickHouse автоматически обновляет:
CREATE MATERIALIZED VIEW daily_stats
ENGINE = AggregatingMergeTree() ORDER BY day AS
SELECT toDate(event_time) AS day, count() AS events_cnt
FROM events GROUP BY day;Что не умеет
- Полноценные транзакции (нет ACID на уровне множественных таблиц).
- JOIN на больших данных работает, но медленнее, чем GROUP BY.
- Constraints (FK, complex unique).
Стек ClickHouse в компании
Backend (PostgreSQL — транзакции)
↓ ETL (Airflow)
ClickHouse (аналитика)
↓
BI (Tableau, DataLens, Superset)Стандартная архитектура data-driven компании.
Чтобы не только читать теорию, но и решать реальные задачи — загляните в бот Карьерника. Там по каждой теме подборка вопросов с разборами.
Cloud
- ClickHouse Cloud — managed.
- Yandex Cloud — managed ClickHouse.
- Altinity Cloud — независимый managed.
Нужно ли аналитику
В РФ — да
ClickHouse — стандарт у Авито, Wildberries, Тинькофф, Ozon, Яндекса.
Для middle+
Базовое знание ClickHouse — обязательно. SQL похож, но нюансы есть.
Для junior
Достаточно знать, что есть. Глубоко учить — после оффера.
Как выучить
- 1–2 дня: основы SQL отличий.
- 1 неделя: arrays, materialized views.
- Месяц: глубокая оптимизация (partitioning, ORDER BY).
Документация ClickHouse — отличная, на русском есть.
Читайте также
FAQ
ClickHouse бесплатный?
Open-source да. Cloud — платный.
Подходит ли для real-time?
Да. Insert latency низкий, читать можно почти сразу.
MySQL vs ClickHouse?
MySQL — OLTP. ClickHouse — OLAP. Совершенно разные задачи.
Сложно ли учить?
SQL базовый — нет. Особенности (engines, materialized views, performance) — несколько недель.