> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Стриминг данных из SQL Server в ClickHouse для быстрой аналитики

# Стриминг данных из SQL Server в ClickHouse для быстрой аналитики: пошаговое руководство

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

В этой статье мы разберем, как организовать стриминг данных из SQL Server в ClickHouse. ClickHouse — отличный выбор, если вам нужна сверхбыстрая аналитика для внутренней панели мониторинга или клиентских панелей мониторинга. Мы пошагово покажем, как настроить обе базы данных, как соединить их между собой и, наконец, как использовать [Streamkap](https://streamkap.com) для стриминга данных. Если SQL Server обеспечивает ваши повседневные операции, а для аналитики вам нужны скорость и возможности ClickHouse, вы попали по адресу.

<div id="why-stream-data-from-sql-server-to-clickhouse">
  ## Почему стоит передавать данные из SQL Server в ClickHouse?
</div>

Если вы читаете это, то, скорее всего, уже сталкивались с этой проблемой: SQL Server отлично справляется с транзакциями, но для тяжёлых аналитических запросов в реальном времени он просто не предназначен.

Здесь и проявляются сильные стороны ClickHouse. ClickHouse создан для аналитики: он обеспечивает сверхбыструю агрегацию и построение отчётов даже на очень больших датасетах. Поэтому, если настроить стриминговый CDC-конвейер для передачи транзакционных данных в ClickHouse, можно получать молниеносно быстрые отчёты — это особенно полезно для операционных задач, продуктовых команд и клиентских панелей мониторинга.

Типичные сценарии использования:

* Внутренняя отчётность без влияния на производительность рабочих приложений
* Клиентские панели мониторинга, которые должны работать быстро и всегда показывать актуальные данные
* Стриминг событий, например чтобы журналы активности пользователей всегда оставались актуальными для аналитики

<div id="what-youll-need-to-get-started">
  ## Что нужно для начала
</div>

Прежде чем переходить к деталям, подготовьте следующее:

<div id="prerequisites">
  ### Предварительные требования
</div>

* Работающий экземпляр SQL Server

* Для этого руководства мы используем AWS RDS for SQL Server, но подойдет любой современный экземпляр SQL Server.[Настройка AWS SQL Server с нуля.](https://streamkap.com/blog/how-to-stream-data-from-rds-sql-server-to-clickhouse-cloud-using-streamkap#setting-up-a-new-rds-sql-server-from-scratch)

* Экземпляр ClickHouse

* Самоуправляемый или облачный.[Настройка ClickHouse с нуля.](https://streamkap.com/blog/how-to-stream-data-from-rds-sql-server-to-clickhouse-cloud-using-streamkap#creating-a-new-clickhouse-account)

* Streamkap

* Этот инструмент станет основой вашего конвейера потоковой передачи данных.

<div id="connection-info">
  ### Параметры подключения
</div>

Убедитесь, что у вас есть:

* адрес сервера SQL Server, порт, имя пользователя и пароль. Для доступа Streamkap к вашей базе данных SQL Server рекомендуется создать отдельные учетную запись и роль.[Ознакомьтесь с нашей документацией по настройке.](https://www.google.com/url?q=https://docs.streamkap.com/docs/sql-server\&sa=D\&source=editors\&ust=1760992472358213\&usg=AOvVaw3jfocCF1VSijgsq1OCpZPj)
* адрес сервера ClickHouse, порт, имя пользователя и пароль. IP Access List в ClickHouse определяет, какие сервисы могут подключаться к вашей базе данных ClickHouse.[Следуйте инструкциям здесь.](https://www.google.com/url?q=https://docs.streamkap.com/docs/clickhouse\&sa=D\&source=editors\&ust=1760992472359060\&usg=AOvVaw3H1XqqwvqAso_TQPNBKEhD)
* таблицы, которые вы хотите передавать в поток — пока начните с одной

<Steps>
  <Step title="Создание источника SQL Server в Streamkap" id="step-1-creating-a-sql-server-source-in-streamkap">
    <a id="setting-up-sql-server-as-a-source" />

    Давайте начнём!

    Сначала настроим подключение к источнику. Так Streamkap понимает, откуда получать изменения.

    Вот как это сделать:

    1. Откройте Streamkap и перейдите в раздел источников.
    2. Создайте новый источник.

    * Укажите понятное имя (например, sqlserver-demo-source).

    3. Заполните сведения о подключении к SQL Server:

    * Хост (например, your-db-instance.rds.amazonaws.com)
    * Порт (по умолчанию для SQL Server используется 3306)
    * Имя пользователя и пароль
    * Имя базы данных

    <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/image3.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=b0f0584f3a5d4ad25920d0bdedce7fe2" size="lg" width="1654" height="1156" data-path="images/integrations/data-ingestion/etl-tools/image3.webp" />

    #### Что происходит в фоновом режиме

    <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/image1.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=fe4e2ec6f907f030fdec36d1f2b4e71e" size="lg" width="1999" height="648" data-path="images/integrations/data-ingestion/etl-tools/image1.webp" />

    После настройки Streamkap подключится к вашему SQL Server и обнаружит таблицы. Для этой демонстрации мы выберем таблицу, в которую уже поступают данные, например events или transactions.
  </Step>

  <Step title="Добавьте ClickHouse как пункт назначения в Streamkap" id="step-2-add-a-clickhouse-destination-in-streamkap">
    <a id="creating-a-clickhouse-destination" />

    Теперь настроим пункт назначения, куда будут отправляться все эти данные.

    Как и в случае с источником, мы создадим пункт назначения, используя сведения о подключении ClickHouse.

    #### Шаги:

    1. Перейдите в раздел пунктов назначения в Streamkap.
    2. Добавьте новый пункт назначения — выберите ClickHouse в качестве типа пункта назначения.
    3. Введите данные для ClickHouse:

    * Хост
    * Порт (по умолчанию — 9000)
    * Имя пользователя и пароль
    * Имя базы данных

    Пример снимка экрана: добавление нового пункта назначения ClickHouse в панели мониторинга Streamkap.

    ### Режим upsert: что это?

    Это важный шаг: нам нужно использовать режим ClickHouse «upsert», который «под капотом» использует движок ReplacingMergeTree в ClickHouse. Это позволяет эффективно объединять входящие записи и обрабатывать обновления после приёма, используя то, что ClickHouse называет «слиянием частей».

    * Это гарантирует, что ваша целевая таблица не будет заполняться дубликатами при изменениях на стороне SQL Server.

    ### Обработка изменения схемы

    В ClickHouse и SQL Server набор столбцов иногда различается — особенно когда приложение уже работает, а разработчики продолжают добавлять новые столбцы на лету.

    * Хорошая новость: Streamkap поддерживает базовое изменение схемы. Это значит, что если вы добавите новый столбец в SQL Server, он появится и в ClickHouse.

    Просто выберите «schema evolution» в настройках пункта назначения. При необходимости это всегда можно изменить позже.
  </Step>

  <Step title="Настройте конвейер в Streamkap" id="step-3-set-up-the-pipeline-in-streamkap">
    <a id="building-the-streaming-pipeline" />

    Когда источник и пункт назначения заданы, пора перейти к самой интересной части — стримингу данных!

    #### Настройка конвейера

    1. Перейдите на вкладку Pipelines в Streamkap.

    2. Создайте новый конвейер.

    3. Выберите источник SQL Server (`sqlserver-demo-source`).

    4. Выберите пункт назначения ClickHouse (`clickhouse-tutorial-destination`).

    5. Выберите таблицу, которую хотите передавать в стриминге, — допустим, это `events`.

    6. Настройте CDC (фиксация изменений данных).

    * В этом примере мы будем передавать в стриминге новые данные (на первом этапе дозагрузку можно пропустить и сосредоточиться на событиях CDC).

    Снимок экрана с настройками конвейера: выбор источника, пункта назначения и таблицы.

    #### Нужна ли вам дозагрузка?

    <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/image2.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=116f56b3a29c08de2bbd85c5cbbfa00f" size="lg" width="1999" height="563" data-path="images/integrations/data-ingestion/etl-tools/image2.webp" />

    У вас может возникнуть вопрос: нужно ли дозагружать старые данные?

    Во многих аналитических сценариях достаточно просто начать со стриминга изменений с текущего момента, а при необходимости позже можно дозагрузить и более старые данные.

    Пока просто выберите “don’t backfill”, если только у вас нет конкретной необходимости.
  </Step>

  <Step title="Просмотр потока данных" id="step-4-watch-the-data-stream">
    <a id="streaming-in-action-what-to-expect" />

    Теперь ваш конвейер настроен и работает!

    Вот что происходит:

    * Когда в исходную таблицу SQL Server поступают новые данные, конвейер Streamkap фиксирует изменения и отправляет их в ClickHouse.
    * ClickHouse (благодаря ReplacingMergeTree и слиянию частей) принимает эти строки и объединяет обновления.
    * Схема успевает за изменениями — добавьте столбцы в SQL Server, и они появятся и в ClickHouse.

    На панели мониторинга в реальном времени или в журналах видно, как растёт количество строк в ClickHouse и SQL Server.

    Можно буквально наблюдать, как число строк в ClickHouse растёт по мере поступления данных в SQL Server.

    ```sql theme={null}
    -- Example: Checking rows in ClickHouse 
    SELECT COUNT(*) FROM analytics.events; |
    ```

    При высокой нагрузке возможна некоторая задержка, но в большинстве случаев данные поступают почти в реальном времени.
  </Step>
</Steps>

<div id="under-the-hood-whats-streamkap-actually-doing">
  ## Что происходит «под капотом»: что на самом деле делает Streamkap?
</div>

Чтобы вы лучше понимали, как это работает:

* Streamkap отслеживает бинарный лог SQL Server (тот самый лог, который используется для репликации).
* Как только в вашей таблице вставляется, обновляется или удаляется строка, Streamkap сразу фиксирует это событие.
* Он преобразует событие в формат, понятный ClickHouse, и передаёт его дальше, мгновенно применяя изменения в вашей аналитической БД.

Это не просто ETL — это полноценный CDC (фиксация изменений данных) в реальном времени.

<div id="advanced-options">
  ## Расширенные возможности
</div>

<div id="upsert-vs-insert-modes">
  ### Режимы Upsert и Insert
</div>

Чем отличается простая вставка каждой строки (режим Insert) от режима, в котором также учитываются обновления и удаления (режим Upsert)?

* Режим Insert: Каждая новая строка добавляется — даже если это обновление, в результате появляются дубликаты.
* Режим Upsert: Обновления существующих строк перезаписывают текущие данные — такой режим гораздо лучше поддерживает актуальность и чистоту аналитики.

<div id="handling-schema-evolution">
  ### Обработка изменений схемы
</div>

Приложения меняются — и схемы тоже. С этим конвейером:

* Добавили новый столбец в рабочую таблицу?
  Streamkap обнаружит его и добавит на стороне ClickHouse.
* Удалили столбец?
  В зависимости от настроек может потребоваться миграция, но в большинстве случаев новые столбцы добавляются без проблем.

<div id="real-world-monitoring-keeping-tabs-on-the-pipeline">
  ## Практический мониторинг: как следить за конвейером
</div>

<div id="checking-pipeline-health">
  ### Проверка состояния конвейера
</div>

Streamkap предоставляет панель мониторинга, где вы можете:

* Просматривать отставание конвейера (насколько свежи ваши данные?)
* Отслеживать количество строк и пропускную способность
* Получать оповещения, если что-то идет не так

Пример панели мониторинга: график задержки, количество строк и индикаторы состояния.

<div id="common-metrics-to-watch">
  ### Основные метрики, за которыми стоит следить
</div>

* Отставание: насколько ClickHouse отстаёт от SQL Server?
* Пропускная способность: число строк в секунду
* Частота ошибок: должна быть близка к нулю

<div id="going-live-querying-clickhouse">
  ## Переходим к делу: запросы к ClickHouse
</div>

Теперь, когда данные уже в ClickHouse, вы можете выполнять запросы с помощью всех этих быстрых аналитических инструментов. Вот простой пример:

```sql theme={null}
-- Показать топ-10 активных пользователей за последний час
SELECT user\_id, COUNT(*) AS actionsFROM analytics.eventsWHERE event\_time >= now() - INTERVAL 1 HOURGROUP BY user\_idORDER BY actions DESCLIMIT 10;
```

Используйте ClickHouse вместе с такими инструментами для создания панелей мониторинга, как Grafana, Superset и Redash, чтобы создавать полнофункциональные отчёты.

<div id="next-steps-and-deep-dives">
  ## Следующие шаги и материалы для углублённого изучения
</div>

Это руководство лишь в общих чертах показывает, что можно сделать. Освоив основы, дальше можно изучить следующее:

* Настройка фильтрации потоков (синхронизация только некоторых таблиц/столбцов)
* Стриминг данных из нескольких источников в одну аналитическую БД
* Использование этого вместе с S3/озёрами данных для холодного хранения
* Автоматизация миграций схемы при изменении таблиц
* Защита вашего конвейера с помощью SSL и правил firewall

Следите за [блогом Streamkap](https://streamkap.com/blog), где публикуются более подробные руководства.

<div id="faq-and-troubleshooting">
  ## FAQ и устранение неполадок
</div>

В: Это работает с облачными базами данных?
О: Да! В этом примере мы использовали AWS RDS. Просто убедитесь, что открыты нужные порты.

В: А как насчёт производительности?
О: ClickHouse очень быстрый. Узким местом обычно становится сеть или скорость binlog исходной базы данных, но в большинстве случаев задержка составляет меньше секунды.

В: Можно ли обрабатывать и удаления?
О: Безусловно. В режиме upsert удаления тоже помечаются и обрабатываются в ClickHouse.

<div id="wrapping-up">
  ## Подводя итоги
</div>

Итак, мы рассмотрели, как организовать потоковую передачу данных из SQL Server в ClickHouse с помощью Streamkap. Это быстро, гибко и отлично подходит для команд, которым нужна аналитика с минимальной задержкой, не перегружая рабочие базы данных.

Готовы попробовать?
Перейдите на [страницу регистрации](https://app.streamkap.com/account/sign-up) и дайте нам знать, если хотите, чтобы мы осветили такие темы, как:

* Upsert и вставка: все тонкости обоих подходов
* Сквозная задержка: как быстро можно получить итоговое аналитическое представление?
* Настройка производительности и пропускная способность
* Практические панели мониторинга на основе этого стека

Спасибо, что дочитали! Удачного стриминга.
