Руководство по миграции с 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
В сценарии извлечения используется ClickHouse JDBC Bridge для прямого подключения к кластеру Redshift из экземпляра ClickHouse и выполнения запросов INSERT INTO ... SELECT:

Преимущества
- Универсальность для всех инструментов, совместимых с JDBC
- Элегантное решение для выполнения запросов к нескольким внешним источникам данных из ClickHouse
Недостатки
- Требуется экземпляр ClickHouse JDBC Bridge, который может стать потенциальным узким местом масштабируемости
Несмотря на то что Redshift основан на PostgreSQL, использование табличной функции или движка PostgreSQL в ClickHouse невозможно, поскольку 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 в промежуточном формате, а затем, на втором шаге, загружаем данные из S3 в ClickHouse.

Преимущества
- И Redshift, и ClickHouse обладают мощной поддержкой интеграции с S3.
- Используются существующие возможности, такие как команда Redshift
UNLOADи S3 table function / table engine в 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 для ускорения ингестии данных.

