Amazon Redshift — популярное облачное решение для хранилищ данных в составе Amazon Web Services. В этом руководстве рассматриваются различные подходы к миграции данных из экземпляра Redshift в ClickHouse. Мы разберём три варианта:
Со стороны экземпляра ClickHouse можно:
-
PUSH передавать данные в ClickHouse с помощью стороннего ETL/ELT-инструмента или сервиса
-
PULL получать данные из Redshift с помощью ClickHouse JDBC Bridge
-
PIVOT использовать объектное хранилище S3 по схеме «сначала выгрузка, затем загрузка»
В этом руководстве Redshift используется как источник данных. Однако описанные здесь подходы к миграции не ограничиваются Redshift, и аналогичные шаги можно применить к любому совместимому источнику данных.
Передача данных из Redshift в ClickHouse по сценарию Push
В сценарии Push используется сторонний инструмент или сервис (либо собственный код, либо ETL/ELT) для отправки данных в ваш экземпляр ClickHouse. Например, можно использовать такое ПО, как Airbyte, чтобы переносить данные из вашего экземпляра Redshift (как источника) в ClickHouse (как пункт назначения) (см. наше руководство по интеграции с Airbyte)
- Можно использовать существующий каталог коннекторов ETL/ELT-инструментов.
- Встроенные возможности для синхронизации данных (логика append/overwrite/increment).
- Поддерживаются сценарии преобразования данных (например, см. наше руководство по интеграции с dbt).
- Вам потребуется настроить и поддерживать инфраструктуру ETL/ELT.
- В архитектуре появляется сторонний компонент, который может стать потенциальным узким местом с точки зрения масштабируемости.
Перенос данных из Redshift в ClickHouse методом Pull
В сценарии Pull используется 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-server": {
"aliases": [
"redshift"
],
"driverUrls": [
"https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/2.1.0.4/redshift-jdbc42-2.1.0.4.jar"
],
"driverClassName": "com.amazon.redshift.jdbc.Driver",
"jdbcUrl": "jdbc:redshift://redshift-cluster-1.ckubnplpz1uv.us-east-1.redshift.amazonaws.com:5439/dev",
"username": "awsuser",
"password": "<password>",
"maximumPoolSize": 5
}
}
Выполняйте запросы к экземпляру Redshift из ClickHouse
После развертывания и запуска ClickHouse JDBC Bridge вы сможете выполнять запросы к экземпляру Redshift из ClickHouseSELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users limit 5')
Query id: 1b7de211-c0f6-4117-86a2-276484f9f4c0
┌─username─┬─firstname─┬─lastname─┐
│ PGL08LJI │ Vladimir │ Humphrey │
│ XDZ38RDD │ Barry │ Roy │
│ AEB55QTM │ Reagan │ Hodge │
│ OWY35QYB │ Tamekah │ Juarez │
│ MSD36KVR │ Mufутau │ Watkins │
└──────────┴───────────┴──────────┘
5 rows in set. Elapsed: 0.438 sec.
SELECT *
FROM jdbc('redshift', 'select count(*) from sales')
Query id: 2d0f957c-8f4e-43b2-a66a-cc48cc96237b
┌──count─┐
│ 172456 │
└────────┘
1 rows in set. Elapsed: 0.304 sec.
Импортируйте данные из Redshift в ClickHouse
Ниже показано, как импортировать данные с помощью оператора INSERT INTO ... SELECT# TABLE CREATION with 3 columns
CREATE TABLE users_imported
(
`username` String,
`firstname` String,
`lastname` String
)
ENGINE = MergeTree
ORDER BY firstname
Query id: c7c4c44b-cdb2-49cf-b319-4e569976ab05
Ok.
0 rows in set. Elapsed: 0.233 sec.
INSERT INTO users_imported (*) SELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users')
Query id: 9d3a688d-b45a-40f4-a7c7-97d93d7149f1
Ok.
0 rows in set. Elapsed: 4.498 sec. Processed 49.99 thousand rows, 2.49 MB (11.11 thousand rows/s., 554.27 KB/s.)
Перенос данных из Redshift в ClickHouse по схеме PIVOT с использованием S3
В этом сценарии мы экспортируем данные в S3 в промежуточном формате PIVOT, а на втором этапе загружаем их из S3 в ClickHouse.
- И Redshift, и ClickHouse предоставляют широкие возможности интеграции с S3.
- Задействует уже имеющиеся возможности, такие как команда
UNLOAD в Redshift и табличная функция S3 / движок таблицы в ClickHouse.
- Легко масштабируется благодаря параллельному чтению и высокой пропускной способности ClickHouse при работе с S3.
- Позволяет использовать продвинутые сжатые форматы, такие как Apache Parquet.
- Процесс состоит из двух этапов (выгрузка из Redshift, затем загрузка в ClickHouse).
Экспортируйте данные в S3 бакет с помощью UNLOAD
С помощью функции UNLOAD в Redshift экспортируйте данные в существующий закрытый S3 бакет:В результате в S3 будут созданы файлы-части с исходными даннымиСоздайте таблицу в ClickHouse
Создайте таблицу в ClickHouse:CREATE TABLE users
(
username String,
firstname String,
lastname String
)
ENGINE = MergeTree
ORDER BY username
Либо ClickHouse может попытаться определить структуру таблицы с помощью CREATE TABLE ... EMPTY AS SELECT:CREATE TABLE users
ENGINE = MergeTree ORDER BY username
EMPTY AS
SELECT * FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')
Это особенно хорошо работает, когда данные хранятся в формате, содержащем информацию о типах данных, например в Parquet.Загрузите файлы S3 в ClickHouse
Загрузите файлы S3 в ClickHouse с помощью оператора INSERT INTO ... SELECT:INSERT INTO users SELECT *
FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')
Query id: 2e7e219a-6124-461c-8d75-e4f5002c8557
Ok.
0 rows in set. Elapsed: 0.545 sec. Processed 49.99 thousand rows, 2.34 MB (91.72 thousand rows/s., 4.30 MB/s.)
В этом примере в качестве промежуточного формата использовался CSV. Однако для production-нагрузок мы рекомендуем Apache Parquet как лучший вариант для крупных миграций, поскольку он поддерживает сжатие, помогает сократить затраты на хранение и уменьшает время передачи данных. (По умолчанию каждая группа строк сжимается с помощью SNAPPY). ClickHouse также использует столбцовую организацию Parquet для ускорения ингестии данных.
Последнее изменение 10 июня 2026 г.