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

Миграция данных из 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, использование функции таблицы PostgreSQL ClickHouse или движка таблицы невозможно, поскольку 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 для ускорения приема данных.