Перейти к основному содержимому
Перейти к основному содержимому

Миграция данных из Redshift в ClickHouse

Введение

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

С точки зрения экземпляра ClickHouse, вы можете:

  1. PUSH данные в ClickHouse, используя сторонний инструмент или сервис ETL/ELT

  2. PULL данные из Redshift с использованием ClickHouse JDBC Bridge

  3. PIVOT с использованием объектного хранилища S3, применяя логику «Выгрузить, затем загрузить»

примечание

В этом учебнике мы использовали Redshift в качестве источника данных. Тем не менее, представленные подходы миграции не являются эксклюзивными для Redshift, и аналогичные шаги могут быть применены к любому совместимому источнику данных.

Передача данных из Redshift в ClickHouse

В сценарии передачи данные отправляются с помощью стороннего инструмента или сервиса (либо кастомного кода, либо 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, использование функции таблицы или движка таблицы ClickHouse для PostgreSQL невозможно, так как ClickHouse требует версию PostgreSQL 9 или выше, а API Redshift основан на более ранней версии (8.x).

Учебник

Чтобы использовать этот вариант, необходимо настроить ClickHouse JDBC Bridge. ClickHouse JDBC Bridge — это автономное Java-приложение, которое обрабатывает соединение JDBC и служит прокси между экземпляром ClickHouse и источниками данных. Для этого учебника мы использовали предварительно заполненный экземпляр Redshift с образцом базы данных.

  1. Разверните ClickHouse JDBC Bridge. Для получения дополнительной информации смотрите наш пользовательский гид по JDBC для внешних источников данных
примечание

Если вы используете ClickHouse Cloud, вам нужно будет запустить ClickHouse JDBC Bridge в отдельной среде и подключиться к ClickHouse Cloud с помощью функции remoteSecure

  1. Настройте источник данных Redshift для ClickHouse JDBC Bridge. Например, /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
  1. Как только ClickHouse JDBC Bridge будет развернут и запущен, вы можете начать выполнять запросы к вашему экземпляру Redshift из ClickHouse
  1. Далее мы покажем импорт данных с помощью оператора INSERT INTO ... SELECT

Пивот данных из Redshift в ClickHouse с использованием S3

В этом сценарии мы экспортируем данные в S3 в промежуточном формате пивота, а затем загружаем данные из S3 в ClickHouse.

Плюсы

  • И Redshift, и ClickHouse обладают мощными функциями интеграции с S3.
  • Использует существующие функции, такие как команда UNLOAD в Redshift и функция таблицы / движок таблицы S3 в ClickHouse.
  • Масштабируется без проблем благодаря параллельному чтению и высокой пропускной способности между S3 и ClickHouse.
  • Может использовать сложные и сжатые форматы, такие как Apache Parquet.

Минусы

  • Два шага в процессе (выгрузка из Redshift, затем загрузка в ClickHouse).

Учебник

  1. Используя функцию UNLOAD в Redshift, экспортируйте данные в существующее частное S3 хранилище:

    Это приведет к созданию файлов частей, содержащих необработанные данные в S3

  2. Создайте таблицу в ClickHouse:

    В качестве альтернативы ClickHouse может попробовать вывести структуру таблицы, используя CREATE TABLE ... EMPTY AS SELECT:

    Это особенно хорошо работает, когда данные находятся в формате, содержащем информацию о типах данных, как Parquet.

  3. Загрузите S3 файлы в ClickHouse с помощью оператора INSERT INTO ... SELECT:

примечание

В этом примере использовался CSV в качестве формата пивота. Тем не менее, для производственных задач мы рекомендуем использовать Apache Parquet в качестве лучшего варианта для крупных миграций, так как он содержит сжатие и может сэкономить некоторые затраты на хранение, одновременно уменьшая время передачи. (По умолчанию каждая группа строк сжимается с использованием SNAPPY). ClickHouse также использует колонкоориентированность Parquet для ускорения приема данных.