Почему стоит передавать данные из SQL Server в ClickHouse?
- Внутренняя отчётность без влияния на производительность рабочих приложений
- Клиентские панели мониторинга, которые должны работать быстро и всегда показывать актуальные данные
- Стриминг событий, например чтобы журналы активности пользователей всегда оставались актуальными для аналитики
Что нужно для начала
Предварительные требования
- Работающий экземпляр SQL Server
- Для этого руководства мы используем AWS RDS for SQL Server, но подойдет любой современный экземпляр SQL Server.Настройка AWS SQL Server с нуля.
- Экземпляр ClickHouse
- Самоуправляемый или облачный.Настройка ClickHouse с нуля.
- Streamkap
- Этот инструмент станет основой вашего конвейера стриминга данных.
Параметры подключения
- адрес сервера SQL Server, порт, имя пользователя и пароль. Для доступа Streamkap к вашей базе данных SQL Server рекомендуется создать отдельные учетную запись и роль.Ознакомьтесь с нашей документацией по настройке.
- адрес сервера ClickHouse, порт, имя пользователя и пароль. IP Access List в ClickHouse определяет, какие сервисы могут подключаться к вашей базе данных ClickHouse.Следуйте инструкциям здесь.
- таблицы, которые вы хотите передавать в поток — пока начните с одной
Настройка SQL Server в качестве источника
Шаг 1: Создание источника SQL Server в Streamkap
- Откройте Streamkap и перейдите в раздел источников.
- Создайте новый источник.
- Задайте ему понятное имя (например, sqlserver-demo-source).
- Укажите сведения о подключении к SQL Server:
- Хост (например, your-db-instance.rds.amazonaws.com)
- Порт (по умолчанию для SQL Server — 3306)
- Имя пользователя и пароль
- Имя базы данных
Что происходит под капотом
Создание пункта назначения ClickHouse
Шаг 2: Добавьте пункт назначения ClickHouse в Streamkap
Шаги:
- Перейдите в раздел пунктов назначения в Streamkap.
- Добавьте новый пункт назначения — выберите ClickHouse в качестве типа назначения.
- Укажите данные ClickHouse:
- Хост
- Порт (по умолчанию — 9000)
- Имя пользователя и пароль
- Имя базы данных
Режим upsert: что это такое?
- Это гарантирует, что ваша целевая таблица не будет заполняться дубликатами при изменениях на стороне SQL Server.
Обработка изменений схемы
- Хорошая новость: Streamkap поддерживает базовые изменения схемы. Это значит, что если вы добавите новый столбец в SQL Server, он появится и в ClickHouse.
Создание стриминг-конвейера
Шаг 3: Настройте конвейер в Streamkap
Настройка конвейера
- Перейдите на вкладку Pipelines в Streamkap.
- Создайте новый конвейер.
- Выберите источник SQL Server (sqlserver-demo-source).
- Выберите пункт назначения ClickHouse (clickhouse-tutorial-destination).
- Выберите таблицу, данные из которой хотите передавать — допустим, это events.
- Настройте CDC (фиксацию изменений данных).
- В этом примере мы будем передавать только новые данные (на первом этапе дозагрузку можно пропустить и сосредоточиться на событиях CDC).
Нужна ли дозагрузка?
Стриминг в действии: чего ожидать
Шаг 4: Следите за потоком данных
- Когда новые данные попадают в исходную таблицу в SQL Server, конвейер Streamkap отслеживает изменения и отправляет их в ClickHouse.
- ClickHouse (благодаря ReplacingMergeTree и слиянию частей) принимает эти строки и объединяет обновления.
- Схема успевает за изменениями — добавьте столбцы в SQL Server, и они появятся и в ClickHouse.
Что происходит «под капотом»: что на самом деле делает Streamkap?
- Streamkap отслеживает бинарный лог SQL Server (тот самый лог, который используется для репликации).
- Как только в вашей таблице вставляется, обновляется или удаляется строка, Streamkap сразу фиксирует это событие.
- Он преобразует событие в формат, понятный ClickHouse, и передаёт его дальше, мгновенно применяя изменения в вашей аналитической БД.
Расширенные возможности
Режимы Upsert и Insert
- Режим Insert: Каждая новая строка добавляется — даже если это обновление, в результате появляются дубликаты.
- Режим Upsert: Обновления существующих строк перезаписывают текущие данные — такой режим гораздо лучше поддерживает актуальность и чистоту аналитики.
Обработка изменений схемы
- Добавили новый столбец в рабочую таблицу? Streamkap обнаружит его и добавит на стороне ClickHouse.
- Удалили столбец? В зависимости от настроек может потребоваться миграция, но в большинстве случаев новые столбцы добавляются без проблем.
Практический мониторинг: как следить за конвейером
Проверка состояния конвейера
- Просматривать отставание конвейера (насколько свежи ваши данные?)
- Отслеживать количество строк и пропускную способность
- Получать оповещения, если что-то идет не так
Основные метрики, за которыми стоит следить
- Отставание: насколько ClickHouse отстаёт от SQL Server?
- Пропускная способность: число строк в секунду
- Частота ошибок: должна быть близка к нулю
Переходим к делу: запросы к ClickHouse
Следующие шаги и материалы для углублённого изучения
- Настройка фильтрации потоков (синхронизация только некоторых таблиц/столбцов)
- Стриминг данных из нескольких источников в одну аналитическую БД
- Использование этого вместе с S3/озёрами данных для холодного хранения
- Автоматизация миграций схемы при изменении таблиц
- Защита вашего конвейера с помощью SSL и правил firewall
FAQ и устранение неполадок
Подводя итоги
- Upsert и вставка: все тонкости обоих подходов
- Сквозная задержка: как быстро можно получить итоговое аналитическое представление?
- Настройка производительности и пропускная способность
- Практические панели мониторинга на основе этого стека