#MergeTree

3 posts loaded — scroll for more

Text
bigdataschool-moscow
bigdataschool-moscow

Интеграции ClickHouse: работа с MySQL, S3, Kafka и внешними словарями. Урок 7

Интеграции ClickHouse: работа с MySQL, S3, Kafka и внешними словарями. Урок 7

ДлДо сих пор мы рассматривали ClickHouse как самостоятельную систему: создавали в нем таблицы и загружали данные. Однако в реальном мире данные редко живут в одном месте. Транзакционная информация находится в реляционных базах вроде MySQL или PostgreSQL, архивы логов — в объектных хранилищах типа Amazon S3, а потоки событий в реальном времени — в Apache Kafka. Перемещать все эти данные в ClickHouse с помощью сложных ETL-процессов — долго и дорого. К счастью, ClickHouse спроектирован как открытый аналитический хаб и умеет работать с внешними данными напрямую. В этой статье мы рассмотрим самые важные механизмы интеграции, которые превращают ClickHouse из просто быстрой базы данных в центр вашей аналитической экосистемы.
Движки для внешних баз данных: Запросы без перемещения
Частая задача — объединить аналитические данные из ClickHouse (например, логи событий) со справочной информацией из основной, транзакционной базы данных. ClickHouse позволяет делать это “на лету” с помощью специальных движков таблиц. Как это работает? Вы создаете в ClickHouse таблицу, которая не хранит данные сама, а выступает в роли “прокси” или коннектора к таблице во внешней базе. Каждый раз, когда вы делаете SELECT к такой таблице, ClickHouse перенаправляет запрос во внешнюю систему.
Пример: Подключение к MySQL
Предположим, в MySQL у нас есть таблица users с информацией о пользователях. Создадим ее “отражение” в ClickHouse:
CREATE TABLE users_from_mysql (
user_id UInt64,
user_name String,
registration_date Date
)
ENGINE = MySQL(‘mysql_host:3306’, 'mysql_db’, 'users’, 'mysql_user’, 'password’);
Важные оговорки:
Производительность: Этот способ не предназначен для высоконагруженных запросов к внешней базе. Он отлично подходит для JOIN'ов с небольшими справочниками.
Predicate pushdown: ClickHouse старается “проталкивать” WHERE условия во внешнюю базу, чтобы фильтровать данные на ее стороне, но это работает не для всех типов запросов.
 
Интеграция ClickHouse при работе с файлами в S3: Анализируем архивы на месте
Объектные хранилища, такие как Amazon S3, — популярное место для хранения огромных архивов логов. Загружать терабайты таких данных в ClickHouse для разового анализа неэффективно. И этого не нужно делать! Интеграция ClickHouse может помочь выполнять запросы напрямую к файлам в S3 с помощью табличной функции s3()
Пример: Запрос к CSV файлу в S3
SELECT
request_method,
status_code,
count()
FROM s3(
'https://my-bucket.s3.us-east-1.amazonaws.com/logs/archive-*.csv.gz’,
'AWS_ACCESS_KEY_ID’,
'AWS_SECRET_ACCESS_KEY’,
'CSVWithNames’,
'request_method String, status_code UInt16’
)
GROUP BY request_method, status_code;
Это невероятно мощный инструмент для работы с “холодными” данными.
Потоковая обработка: Интеграция ClickHouse с Apache Kafka
Для аналитики в реальном времени данные часто поступают через брокеры сообщений, и Apache Kafka — самый популярный из них. ClickHouse имеет нативный движок Kafka для создания эффективных real-time пайплайнов. Более подробно мы рассматриваем примеры построения pipelinов на наших курсах, посвященных созданию хранилищ данных на ClickHouse и  Kafka для инженеров данных
Архитектура пайплайна:
Стандартный подход состоит из трех компонентов:
Таблица с движком Kafka: Она подключается к топику Kafka и работает как потребитель (consumer).
Целевая таблица с движком MergeTree: Это основная, оптимизированная таблица, где данные будут храниться постоянно.
Материализованное представление (Materialized View): Это “клей”, который автоматически читает новые данные из таблицы Kafka и вставляет их в таблицу MergeTree.
Теперь любой JSON, отправленный в топик в Kafka, будет автоматически распарсен и практически мгновенно попадет в нашу основную аналитическую таблицу.
Интеграция ClickHouse с Apache Kafka - бесплатный курс ClickHouse от https://bigdataschool.ru

Обогащение данных: Внешние словари
Еще одна частая задача — обогащение данных. Ваши основные таблицы содержат идентификаторы (user_id), а в отчетах нужны имена (user_name). Делать JOIN каждый раз может быть неэффективно.
Решение — внешние словари. Это справочники (key-value), которые ClickHouse подгружает из внешнего источника и кэширует в оперативной памяти для сверхбыстрого доступа.
Внешние словари для интеграции ClickHouse - бесплатный курс ClickHouse от https://bigdataschool.ru

Как это работает? Для этого Вам нужно описать словарь (в XML или DDL), указывая его структуру, источник (например, таблица в MySQL) и правила обновления. В запросах вы используете специальную функцию dictGet() для получения значения по ключу. Функция dictGet() работает невероятно быстро, так как обращается к данным в оперативной памяти.
Заключение
Бесспорно, ClickHouse — это не изолированная база данных, а мощный аналитический процессор. Освоив эти инструменты интеграции ClickHouse, вы сможете решать гораздо более широкий класс задач, сокращая затраты на разработку сложных ETL-пайплайнов и строя по-настоящему современные аналитические системы.
Использованные референсы и материалы
Официальный сайт Apache Kafka.
Документация ClickHouse по табличной функции s3().
Документация ClickHouse по Внешним словарям.
Статья HTTP Analytics for 6M requests per second using ClickHouse на Cloudflare
SQL-блокнот к Уроку 7 бесплатного курса доступен в нашем репозитории на GitHub 

Read the full article

Text
bigdataschool-moscow
bigdataschool-moscow

Глубокое погружение в движки MergeTree: Replacing, Summing, Aggregating и Collapsing. Урок 5


Если вы работаете с аналитикой больших данных и пользуетесь ClickHouse, то уж точно сталкивались с мощнейшим семейством движков MergeTree. В прошлых статьях мы уже коснулись базового MergeTree и его специализированных братьев, но сейчас пришло время глубже разобраться в самых важных и полезных из них. Почему это стоит сделать? Потому что правильный выбор движка — это не просто формальность, а ключ к эффективной, быстрой и экономной работе с вашими данными!
В этой статье я расскажу, как работают четыре кита семейства MergeTree: ReplacingMergeTree, SummingMergeTree, AggregatingMergeTree и CollapsingMergeTree. Эти движки специально разработаны для автоматизации части работы с данными, значительно упрощая ваши запросы и повышая производительность. Давайте подробно разбираться, в каких сценариях какой движок точно станет вашим лучшим помощником.
🔍 ReplacingMergeTree: храним только самые свежие данные
Представьте, у вас есть таблица профилей пользователей, где постоянно меняется email или время последнего входа. Вам важно хранить только актуальные записи — упрощаем это с ReplacingMergeTree! Этот движок при фоновых слияниях удаляет старые версии с одинаковым ключом, оставляя только последнюю.
Как определить «последнюю»? Просто: укажите дополнительный столбец-версию (например, обновление по времени), и ClickHouse оставит запись с самой свежей версией. Если версия не указана — он просто сохранил последнюю вставленную.
Но будьте внимательны! Дедупликация происходит не сразу после вставки, а только в фоне при слиянии, так что недолго можно увидеть дубли. Если хотите ускорить процесс — используйте команду OPTIMIZE TABLE … FINAL.
📌 Пример создания таблицы:
CREATE TABLE user_profiles (
user_id UInt64,
email String,
updated_at DateTime
) ENGINE = ReplacingMergeTree(updated_at) ORDER BY user_id;
🛠️ Такое решение идеально, если вы храните справочники или иные обновляющиеся данные.
📊 SummingMergeTree: поднимаем агрегацию на новый уровень
А если собирать массу сырых метрик — кликов, просмотров или показов — и постоянно надо быстро получать их суммы по дате, кампании или региону? Хранить каждый клик необязательно — SummingMergeTree сделает агрегацию за вас.
Как работает? При фоне слияния все строки с одним и тем же ключом сортировки “свариваются” в одну, а числовые столбцы складываются. В итоге — меньше данных, меньше места и сверхскоростные запросы.
📌 Пример создания таблицы для подсчёта просмотров и кликов:
CREATE TABLE campaign_stats (
event_date Date,
campaign_id UInt32,
views UInt64,
clicks UInt64
) ENGINE = SummingMergeTree() ORDER BY (event_date, campaign_id);
Такой движок просто незаменим в маркетинговой аналитике для больших объемов событий.
⚙️ AggregatingMergeTree: агрегации любой сложности без потерь
А что делать, если нужны не просто суммы, а уникальные пользователи, средние значения или другие продвинутые вычисления? Здесь на сцену выходит AggregatingMergeTree! Он не хранит сырые данные, а сохраняет промежуточные состояния агрегатных функций, что позволяет моментально получать сложные метрики.
Работает через специальные типы столбцов AggregateFunction. Вы сохраняете состояния с помощью функций с суффиксом -State, а получаете итог благодаря функциям с суффиксом -Merge.
📌 Например, считаем уникальных посетителей по страницам за день:
CREATE TABLE daily_unique_users (
day Date,
url String,
visitors AggregateFunction(uniq, UInt64)
) ENGINE = AggregatingMergeTree() ORDER BY (day, url);
INSERT INTO daily_unique_users
SELECT toDate(timestamp) AS day, url, uniqState(user_id) AS visitors
FROM access_logs
GROUP BY day, url;
SELECT day, url, uniqMerge(visitors) AS unique_visitors
FROM daily_unique_users
GROUP BY day, url;
Этот способ экономит ресурсы и время по сравнению с обычным вычислением на огромных сырых данных.
🔄 CollapsingMergeTree: контроль парных событий и балансов
Особая категория задач — отслеживание событий, где важно знать начало и конец, например, сессии пользователей или приход-расход товаров. CollapsingMergeTree поможет автоматически «схлопывать» пары событий с противоположными значениями в специальном столбце Sign (1 и -1).
Ваша таблица будет содержать столбец Sign Int8, где положительные события — с Sign=1, а отрицательные с Sign=-1. При фоновых слияниях пары удаляются, оставляя только фактическое состояние.
📌 Создание такой таблицы требует продуманной логики записи, но она незаменима для поддержки целостности данных и в кейсах сложного учета.
Итоги и рекомендации
Выбор движка из семейства MergeTree — это ваш мощный рычаг оптимизации в ClickHouse. Если вам нужно хранить только последние версии записей — берите ReplacingMergeTree. Для быстрой агрегации численных метрик идеально подойдет SummingMergeTree. Нужны сложные агрегаты, такие как уникальные значения или средние — упрощайте себе жизнь с AggregatingMergeTree. А для задач, где важен учет парных событий и балансов — CollapsingMergeTree ваш верный союзник.
Освоив эти четыре движка, вы существенно сократите объем хранимых данных, упростите запросы и повысите скорость обработки — и это только начало! В следующей статье мы рассмотрим, как оптимизировать запросы и применять индексы для ещё более крутых результатов.
До новых встреч и удачи в анализе! 🚀
Источники и полезные материалы:
Официальная документация ClickHouse по MergeTree
Altinity блог о SummingMergeTree
Alibaba SQL-блокнот к бесплатному курсу — репозиторий GitHub
#ClickHouse #MergeTree #BigDataAnalytics #DataEngineering #ClickHouseTips


Read the full article

Text
bigdataschool-moscow
bigdataschool-moscow

Продвинутые функции SQL в ClickHouse: обработка строк, дат и условная логика. Урок 4


🎉 Добро пожаловать в новый уровень работы с ClickHouse! Если вы уже умеете вставлять и агрегировать данные, пора прокачать навыки и освоить мощные инструменты для работы со строками, датами и условной логикой.
✨ Узнайте, как извлекать нужные части текста, форматировать дату и время, а также создавать гибкие запросы с CASE WHEN. Например, выделяем доменное имя из IP или считаем события по дням недели — всё реально! 💡
Готовы погрузиться в магию SQL-запросов? Делитесь в комментариях, какие функции уже пробовали, и какие хотите освоить дальше! 🚀


Read the full article