Учебник ClickHouse и аналитические базы данных для начинающих
Этот курс знакомит с миром аналитических баз данных на примере ClickHouse — одной из самых быстрых колоночных СУБД, которую создали в Яндексе для обработки миллиардов строк. Вы поймёте, чем аналитическая нагрузка (OLAP) отличается от транзакционной (OLTP) и почему привычные PostgreSQL и MySQL «задыхаются» на больших отчётах. Разберётесь, как устроено колоночное хранение, почему оно радикально ускоряет аналитику и как им пользоваться. Освоите главный движок ClickHouse — MergeTree, научитесь правильно выбирать ORDER BY и партиции, вставлять данные большими батчами, строить материализованные представления для предагрегации и применять агрегатные комбинаторы. В финале — обзор шардирования, интеграций с Kafka и S3, типичные ошибки и честный ответ на вопрос, когда ClickHouse использовать НЕ стоит. Базового знания SQL достаточно; курс рассчитан на тех, кто хочет перейти от «обычных» баз к аналитике на больших данных.
Курс «ClickHouse и аналитические базы данных» состоит из 6 разделов и 21 урока: OLAP против OLTP: зачем нужны аналитические базы, Знакомство с ClickHouse, Движок MergeTree — сердце ClickHouse, Загрузка данных и агрегации, Ускорение и управление данными и Масштабирование, интеграции и пределы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 OLAP против OLTP: зачем нужны аналитические базы
- Транзакции и аналитика: две разные нагрузки
OLTP и OLAP — два типа нагрузки на базу данных. Разбираемся, чем отличаются короткие транзакции от тяжёлых аналитических запросов.
- Почему обычные базы медленные на аналитике
Почему PostgreSQL и MySQL тормозят на больших отчётах: строковое хранение, чтение лишних данных и узкое место диска.
- Колоночное хранение: главная идея аналитики
Что такое колоночное хранение данных, почему оно ускоряет аналитику и улучшает сжатие — на наглядных ASCII-схемах.
- Транзакции и аналитика: две разные нагрузки
2 Знакомство с ClickHouse
- Что такое ClickHouse и где он применяется
ClickHouse — колоночная аналитическая СУБД из Яндекса. Где её используют: метрики, логи, аналитика событий, дашборды реального времени.
- Установка и clickhouse-client
Как запустить ClickHouse локально через Docker, подключиться через clickhouse-client и отправлять запросы по HTTP с помощью curl.
- Типы данных ClickHouse
Обзор типов данных ClickHouse: числа фиксированного размера, строки, даты, LowCardinality, Nullable и Enum — и как выбор типа влияет на скорость.
- Что такое ClickHouse и где он применяется
3 Движок MergeTree — сердце ClickHouse
- Движки таблиц и семейство MergeTree
Что такое движок таблицы в ClickHouse, зачем он нужен и почему MergeTree — главный движок для аналитики. Как устроены куски (parts) и их слияние.
- ORDER BY и первичный ключ: ключ к скорости
Как ORDER BY и первичный ключ в MergeTree влияют на скорость запросов через разрежённый индекс и отсечение гранул. Как правильно выбрать порядок ключа.
- Партиционирование данных
Что такое PARTITION BY в ClickHouse, чем партиции отличаются от ORDER BY, как они ускоряют запросы и упрощают удаление старых данных.
- Специализированные движки MergeTree
Варианты MergeTree: ReplacingMergeTree, SummingMergeTree, AggregatingMergeTree и CollapsingMergeTree — что они делают при слиянии и когда их применять.
- Движки таблиц и семейство MergeTree
4 Загрузка данных и агрегации
- Вставка больших объёмов: батчи, а не строки
Почему в ClickHouse нельзя вставлять по одной строке, как грузить данные большими батчами и что такое ошибка too many parts.
- Агрегации и аналитические функции
Аналитические функции ClickHouse: GROUP BY, sum, avg, count, а также специальные функции вроде uniq, uniqCombined, quantile и topK для быстрой аналитики.
- Агрегатные комбинаторы: -If, -Array, -State/-Merge
Комбинаторы агрегатных функций ClickHouse: суффиксы -If, -Array, -State и -Merge. Как они расширяют функции и зачем нужны промежуточные состояния агрегатов.
- Вставка больших объёмов: батчи, а не строки
5 Ускорение и управление данными
- Материализованные представления: предагрегация на лету
Что такое материализованные представления в ClickHouse, как они работают триггером на вставку и зачем нужны для предагрегации данных в реальном времени.
- Сэмплирование данных
Что такое сэмплирование (SAMPLE) в ClickHouse: как посчитать приблизительный результат по части данных в разы быстрее и когда это уместно.
- TTL: автоматический жизненный цикл данных
TTL в ClickHouse: как автоматически удалять или перемещать устаревшие данные, агрегировать историю и экономить место без ручных операций.
- Сжатие данных
Сжатие в ClickHouse: кодеки LZ4 и ZSTD, специализированные кодеки Delta и DoubleDelta, и как сжатие ускоряет аналитику за счёт меньшего чтения с диска.
- Материализованные представления: предагрегация на лету
6 Масштабирование, интеграции и пределы
- Распределённые таблицы и шардирование
Обзор шардирования в ClickHouse: что такое шарды и реплики, как работает движок Distributed и как кластер ускоряет запросы и обеспечивает надёжность.
- Интеграции: Kafka и S3
Интеграции ClickHouse: движок Kafka для потоковой загрузки событий и движок/функция S3 для работы с данными в облачном объектном хранилище.
- ClickHouse против PostgreSQL для аналитики
Сравнение ClickHouse и PostgreSQL для аналитики: колоночное и строковое хранение, транзакции, скорость отчётов и когда какой инструмент выбрать.
- Типичные ошибки и когда ClickHouse не подходит
Главные ошибки при работе с ClickHouse — мелкие вставки, неверный ORDER BY, частые мутации — и честный список задач, для которых ClickHouse не подходит.
- Распределённые таблицы и шардирование