> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Миграция с Amazon Redshift в ClickHouse

# Руководство по миграции с Amazon Redshift в ClickHouse

<div id="introduction">
  ## Введение
</div>

[Amazon Redshift](https://aws.amazon.com/redshift/) — популярное облачное решение для хранилищ данных в составе Amazon Web Services. В этом руководстве рассматриваются различные подходы к миграции данных из экземпляра Redshift в ClickHouse. Мы разберём три варианта:

<Image img="/images/integrations/data-ingestion/redshift/redshift-to-clickhouse.png" size="md" alt="Варианты миграции из Redshift в ClickHouse" />

Со стороны экземпляра ClickHouse можно:

1. **[PUSH](#push-data-from-redshift-to-clickhouse)** передавать данные в ClickHouse с помощью стороннего ETL/ELT-инструмента или сервиса

2. **[PULL](#pull-data-from-redshift-to-clickhouse)** получать данные из Redshift с помощью ClickHouse JDBC Bridge

3. **[PIVOT](#pivot-data-from-redshift-to-clickhouse-using-s3)** использовать объектное хранилище S3 по схеме «сначала выгрузка, затем загрузка»

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

<div id="push-data-from-redshift-to-clickhouse">
  ## Передача данных из Redshift в ClickHouse по сценарию Push
</div>

В сценарии Push используется сторонний инструмент или сервис (либо собственный код, либо [ETL/ELT](https://en.wikipedia.org/wiki/Extract,_transform,_load#ETL_vs._ELT)) для отправки данных в ваш экземпляр ClickHouse. Например, можно использовать такое ПО, как [Airbyte](https://www.airbyte.com/), чтобы переносить данные из вашего экземпляра Redshift (как источника) в ClickHouse (как пункт назначения) ([см. наше руководство по интеграции с Airbyte](/ru/integrations/connectors/data-ingestion/etl-tools/airbyte-and-clickhouse))

<Image img="/images/integrations/data-ingestion/redshift/push.png" size="md" alt="PUSH Redshift в ClickHouse" />

<div id="pros">
  ### Плюсы
</div>

* Можно использовать существующий каталог коннекторов ETL/ELT-инструментов.
* Встроенные возможности для синхронизации данных (логика append/overwrite/increment).
* Поддерживаются сценарии преобразования данных (например, см. наше [руководство по интеграции с dbt](/ru/integrations/connectors/data-ingestion/etl-tools/dbt/index)).

<div id="cons">
  ### Недостатки
</div>

* Вам потребуется настроить и поддерживать инфраструктуру ETL/ELT.
* В архитектуре появляется сторонний компонент, который может стать потенциальным узким местом с точки зрения масштабируемости.

<div id="pull-data-from-redshift-to-clickhouse">
  ## Перенос данных из Redshift в ClickHouse методом Pull
</div>

В сценарии Pull используется ClickHouse JDBC Bridge, который позволяет напрямую подключаться к кластеру Redshift из экземпляра ClickHouse и выполнять запросы `INSERT INTO ... SELECT`:

<Image img="/images/integrations/data-ingestion/redshift/pull.png" size="md" alt="PULL из Redshift в ClickHouse" />

<div id="pros-1">
  ### Преимущества
</div>

* Подходит для всех инструментов с поддержкой JDBC
* Элегантное решение, позволяющее выполнять запросы к нескольким внешним источникам данных прямо из ClickHouse

<div id="cons-1">
  ### Минусы
</div>

* Требуется экземпляр ClickHouse JDBC Bridge, который может стать потенциальным узким местом с точки зрения масштабируемости

<Note>
  Хотя Redshift основан на PostgreSQL, использовать табличную функцию PostgreSQL или движок таблицы ClickHouse нельзя, поскольку ClickHouse требует PostgreSQL версии 9 или выше, а API Redshift основан на более ранней версии (8.x).
</Note>

<div id="tutorial">
  ### Руководство
</div>

Чтобы использовать этот вариант, необходимо настроить ClickHouse JDBC Bridge. ClickHouse JDBC Bridge — это автономное Java-приложение, которое обеспечивает подключение по JDBC и выступает в роли прокси между экземпляром ClickHouse и источниками данных. В этом руководстве мы использовали заранее заполненный экземпляр Redshift с [примером базы данных](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

<Steps>
  <Step>
    #### Разверните ClickHouse JDBC Bridge

    Разверните ClickHouse JDBC Bridge. Подробнее см. в нашем руководстве пользователя по [JDBC для внешних источников данных](/ru/integrations/connectors/data-ingestion/jdbc-with-clickhouse)

    <Note>
      Если вы используете ClickHouse Cloud, ClickHouse JDBC Bridge нужно запускать в отдельной среде и подключаться к ClickHouse Cloud с помощью функции [remoteSecure](/ru/reference/functions/table-functions/remote)
    </Note>
  </Step>

  <Step>
    #### Настройте источник данных Redshift

    Настройте источник данных Redshift для ClickHouse JDBC Bridge. Например, `/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json `

    ```json theme={null}
    {
     "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
     }
    }
    ```
  </Step>

  <Step>
    #### Выполняйте запросы к экземпляру Redshift из ClickHouse

    После развертывания и запуска ClickHouse JDBC Bridge вы сможете выполнять запросы к экземпляру Redshift из ClickHouse

    ```sql theme={null}
    SELECT *
    FROM jdbc('redshift', 'select username, firstname, lastname from users limit 5')
    ```

    ```response theme={null}
    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.
    ```

    ```sql theme={null}
    SELECT *
    FROM jdbc('redshift', 'select count(*) from sales')
    ```

    ```response theme={null}
    Query id: 2d0f957c-8f4e-43b2-a66a-cc48cc96237b

    ┌──count─┐
    │ 172456 │
    └────────┘

    1 rows in set. Elapsed: 0.304 sec.
    ```
  </Step>

  <Step>
    #### Импортируйте данные из Redshift в ClickHouse

    Ниже показано, как импортировать данные с помощью оператора `INSERT INTO ... SELECT`

    ```sql theme={null}
    # TABLE CREATION with 3 columns
    CREATE TABLE users_imported
    (
       `username` String,
       `firstname` String,
       `lastname` String
    )
    ENGINE = MergeTree
    ORDER BY firstname
    ```

    ```response theme={null}
    Query id: c7c4c44b-cdb2-49cf-b319-4e569976ab05

    Ok.

    0 rows in set. Elapsed: 0.233 sec.
    ```

    ```sql theme={null}
    INSERT INTO users_imported (*) SELECT *
    FROM jdbc('redshift', 'select username, firstname, lastname from users')
    ```

    ```response theme={null}
    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.)
    ```
  </Step>
</Steps>

<div id="pivot-data-from-redshift-to-clickhouse-using-s3">
  ## Перенос данных из Redshift в ClickHouse по схеме PIVOT с использованием S3
</div>

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

<Image img="/images/integrations/data-ingestion/redshift/pivot.png" size="md" alt="PIVOT из Redshift с использованием S3" />

<div id="pros">
  ### Плюсы
</div>

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

<div id="cons">
  ### Недостатки
</div>

* Процесс состоит из двух этапов (выгрузка из Redshift, затем загрузка в ClickHouse).

<div id="tutorial">
  ### Руководство
</div>

<Steps>
  <Step>
    #### Экспортируйте данные в S3 бакет с помощью UNLOAD

    С помощью функции [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) в Redshift экспортируйте данные в существующий закрытый S3 бакет:

    <Image img="/images/integrations/data-ingestion/redshift/s3-1.png" size="md" alt="UNLOAD из Redshift в S3" background="white" />

    В результате в S3 будут созданы файлы-части с исходными данными

    <Image img="/images/integrations/data-ingestion/redshift/s3-2.png" size="md" alt="Данные в S3" background="white" />
  </Step>

  <Step>
    #### Создайте таблицу в ClickHouse

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

    ```sql theme={null}
    CREATE TABLE users
    (
      username String,
      firstname String,
      lastname String
    )
    ENGINE = MergeTree
    ORDER BY username
    ```

    Либо ClickHouse может попытаться определить структуру таблицы с помощью `CREATE TABLE ... EMPTY AS SELECT`:

    ```sql theme={null}
    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.
  </Step>

  <Step>
    #### Загрузите файлы S3 в ClickHouse

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

    ```sql theme={null}
    INSERT INTO users SELECT *
    FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')
    ```

    ```response theme={null}
    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.)
    ```

    <Note>
      В этом примере в качестве промежуточного формата использовался CSV. Однако для production-нагрузок мы рекомендуем Apache Parquet как лучший вариант для крупных миграций, поскольку он поддерживает сжатие, помогает сократить затраты на хранение и уменьшает время передачи данных. (По умолчанию каждая группа строк сжимается с помощью SNAPPY). ClickHouse также использует столбцовую организацию Parquet для ускорения ингестии данных.
    </Note>
  </Step>
</Steps>
