Руководство по миграции с Amazon Redshift на ClickHouse
Введение
Amazon Redshift — это популярное облачное решение для построения хранилищ данных, входящее в состав сервисов Amazon Web Services. В этом руководстве представлены различные подходы к миграции данных из кластера Redshift в ClickHouse. Мы рассмотрим три варианта:

Со стороны ClickHouse вы можете:
-
PUSH отправлять данные в ClickHouse, используя сторонний ETL/ELT‑инструмент или сервис
-
PULL забирать данные из Redshift с использованием ClickHouse JDBC Bridge
-
PIVOT использовать объектное хранилище S3 по принципу «выгрузить, затем загрузить»
В этом руководстве мы использовали Redshift в качестве источника данных. Однако представленные здесь подходы к миграции не ограничиваются Redshift, и аналогичные шаги можно применить к любому совместимому источнику данных.
Отправка данных из Redshift в ClickHouse
В push-сценарии идея заключается в использовании стороннего инструмента или сервиса (кастомного кода или решения класса ETL/ELT) для отправки ваших данных в экземпляр ClickHouse. Например, вы можете использовать такое программное обеспечение, как Airbyte, чтобы перемещать данные между экземпляром Redshift (в качестве источника) и ClickHouse (в качестве приёмника) (см. наше руководство по интеграции с Airbyte).

Преимущества
- Возможность использования существующего каталога коннекторов ETL/ELT‑ПО.
- Встроенные механизмы для поддержания данных в синхронизированном состоянии (логика добавления/перезаписи/инкрементных обновлений).
- Возможность реализации сценариев преобразования данных (см., например, наше руководство по интеграции с dbt).
Недостатки
- Пользователям необходимо настроить и поддерживать ETL/ELT‑инфраструктуру.
- В архитектуру добавляется сторонний элемент, который может стать потенциальным узким местом для масштабирования.
Получение данных из Redshift в ClickHouse
В pull-сценарии используется ClickHouse JDBC Bridge для подключения к кластеру Redshift непосредственно из экземпляра ClickHouse и выполнения запросов INSERT INTO ... SELECT:

Преимущества
- Подходит для всех инструментов, совместимых с JDBC
- Элегантное решение, позволяющее выполнять запросы к нескольким внешним источникам данных непосредственно из ClickHouse
Недостатки
- Требует экземпляра ClickHouse JDBC Bridge, который может стать потенциальным узким местом при масштабировании
Несмотря на то, что Redshift основан на PostgreSQL, использование табличной функции PostgreSQL в ClickHouse или движка таблиц PostgreSQL невозможно, поскольку ClickHouse требует PostgreSQL версии 9 или выше, а API Redshift основан на более ранней версии (8.x).
Практическое руководство
Чтобы использовать этот подход, необходимо настроить ClickHouse JDBC Bridge. ClickHouse JDBC Bridge — это автономное Java‑приложение, которое обрабатывает JDBC‑подключения и действует как прокси между экземпляром ClickHouse и источниками данных. В этом руководстве используется предварительно заполненный экземпляр Redshift с примером базы данных.
Разверните ClickHouse JDBC Bridge
Разверните ClickHouse JDBC Bridge. Для получения дополнительной информации см. руководство по JDBC для внешних источников данных.
Если вы используете ClickHouse Cloud, вам необходимо запустить ClickHouse JDBC Bridge в отдельной среде и подключиться к ClickHouse Cloud с помощью функции remoteSecure.
Настройте источник данных Redshift
Настройте источник данных Redshift для ClickHouse JDBC Bridge. Например, /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
Выполните запрос к экземпляру Redshift из ClickHouse
После того как ClickHouse JDBC Bridge будет развернут и запущен, вы можете начинать выполнять запросы к экземпляру Redshift из ClickHouse.
Импорт данных из Redshift в ClickHouse
Ниже показан пример импорта данных с использованием выражения INSERT INTO ... SELECT.
Преобразование данных из Redshift в ClickHouse с использованием S3
В этом сценарии мы экспортируем данные в S3 в промежуточном формате PIVOT, а затем, на втором шаге, загружаем данные из S3 в ClickHouse.

Преимущества
- И Redshift, и ClickHouse обладают мощными возможностями интеграции с S3.
- Использует уже имеющиеся возможности, такие как команда Redshift
UNLOADи табличная функция/движок таблиц S3 в ClickHouse. - Масштабируется без дополнительных усилий благодаря параллельным чтениям и высокой пропускной способности при чтении и записи данных в S3 из ClickHouse.
- Может использовать сложные и сжатые форматы, такие как Apache Parquet.
Недостатки
- Два шага в процессе: сначала выгрузка из Redshift, затем загрузка в ClickHouse.
Практическое руководство
Создание таблицы в ClickHouse
Создайте таблицу в ClickHouse:
В качестве альтернативы ClickHouse может попытаться определить структуру таблицы с помощью CREATE TABLE ... EMPTY AS SELECT:
Это особенно хорошо работает, когда данные находятся в формате, содержащем информацию о типах данных, например Parquet.
Загрузка файлов S3 в ClickHouse
Загрузите файлы из S3 в ClickHouse с помощью оператора INSERT INTO ... SELECT:
В этом примере в качестве промежуточного формата использовался CSV. Однако для рабочих нагрузок в продакшене мы рекомендуем Apache Parquet как лучший вариант для крупных миграций, поскольку он поддерживает сжатие и может снизить затраты на хранение, одновременно сокращая время передачи данных. (По умолчанию каждая группа строк сжимается с помощью SNAPPY). ClickHouse также использует ориентированность Parquet на столбцы для ускорения приёма данных.

