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

> Migração do Amazon Redshift para o ClickHouse

# Guia de migração do Amazon Redshift para o ClickHouse

<div id="introduction">
  ## Introdução
</div>

[Amazon Redshift](https://aws.amazon.com/redshift/) é uma solução popular de armazenamento de dados em nuvem da Amazon Web Services. Este guia apresenta diferentes abordagens para migrar dados de uma instância do Redshift para o ClickHouse. Abordaremos três opções:

<Image img="/images/integrations/data-ingestion/redshift/redshift-to-clickhouse.png" size="md" alt="Opções de migração do Redshift para o ClickHouse" />

Da perspectiva da instância do ClickHouse, você pode:

1. **[enviar](#push-data-from-redshift-to-clickhouse)** enviar dados para o ClickHouse usando uma ferramenta ou serviço de ETL/ELT de terceiros

2. **[extrair](#pull-data-from-redshift-to-clickhouse)** extrair dados do Redshift com a ajuda da ClickHouse JDBC Bridge

3. **[pivotar](#pivot-data-from-redshift-to-clickhouse-using-s3)** usar armazenamento de objetos S3 com uma lógica de "descarregar e depois carregar"

<Note>
  Usamos o Redshift como fonte de dados neste tutorial. No entanto, as abordagens de migração apresentadas aqui não se limitam ao Redshift, e etapas semelhantes podem ser adaptadas para qualquer fonte de dados compatível.
</Note>

<div id="push-data-from-redshift-to-clickhouse">
  ## Enviar dados do Redshift para o ClickHouse
</div>

No cenário de envio, a ideia é usar uma ferramenta ou serviço de terceiros (seja código personalizado ou um [ETL/ELT](https://en.wikipedia.org/wiki/Extract,_transform,_load#ETL_vs._ELT)) para enviar seus dados à sua instância do ClickHouse. Por exemplo, você pode usar um software como o [Airbyte](https://www.airbyte.com/) para transferir dados entre sua instância do Redshift (como origem) e o ClickHouse como destino ([veja nosso guia de integração do Airbyte](/pt-BR/integrations/connectors/data-ingestion/etl-tools/airbyte-and-clickhouse))

<Image img="/images/integrations/data-ingestion/redshift/push.png" size="md" alt="ENVIO do Redshift para o ClickHouse" />

<div id="pros">
  ### Vantagens
</div>

* Pode aproveitar o catálogo existente de conectores do software de ETL/ELT.
* Recursos nativos para manter os dados em sincronia (lógica de append/overwrite/increment).
* Permite cenários de transformação de dados (por exemplo, consulte nosso [guia de integração para dbt](/pt-BR/integrations/connectors/data-ingestion/etl-tools/dbt/index)).

<div id="cons">
  ### Desvantagens
</div>

* Você precisa configurar e manter uma infraestrutura de ETL/ELT.
* Introduz um componente de terceiros na arquitetura, que pode se tornar um gargalo de escalabilidade.

<div id="pull-data-from-redshift-to-clickhouse">
  ## Extrair dados do Redshift para o ClickHouse
</div>

No cenário de extração, a ideia é usar a ClickHouse JDBC Bridge para se conectar diretamente a um cluster do Redshift a partir de uma instância do ClickHouse e executar consultas `INSERT INTO ... SELECT`:

<Image img="/images/integrations/data-ingestion/redshift/pull.png" size="md" alt="extrair do Redshift para o ClickHouse" />

<div id="pros-1">
  ### Prós
</div>

* Genérico para todas as ferramentas compatíveis com JDBC
* Solução elegante para permitir consultas a várias fontes de dados externas a partir do ClickHouse

<div id="cons">
  ### Desvantagens
</div>

* Requer uma instância do ClickHouse JDBC Bridge, o que pode se tornar um gargalo de escalabilidade

<Note>
  Embora o Redshift seja baseado em PostgreSQL, não é possível usar a table function PostgreSQL do ClickHouse nem o table engine, pois o ClickHouse exige PostgreSQL versão 9 ou superior, e a API do Redshift é baseada em uma versão anterior (8.x).
</Note>

<div id="tutorial">
  ### Tutorial
</div>

Para usar esta opção, você precisa configurar uma ClickHouse JDBC Bridge. A ClickHouse JDBC Bridge é um aplicativo Java independente que gerencia a conectividade JDBC e atua como proxy entre a instância do ClickHouse e as fontes de dados. Para este tutorial, usamos uma instância do Redshift pré-carregada com um [banco de dados de exemplo](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

<Steps>
  <Step>
    #### Implante a ClickHouse JDBC Bridge

    Implante a ClickHouse JDBC Bridge. Para mais detalhes, consulte nosso guia do usuário sobre [JDBC para fontes de dados externas](/pt-BR/integrations/connectors/data-ingestion/jdbc-with-clickhouse)

    <Note>
      Se você estiver usando o ClickHouse Cloud, precisará executar sua ClickHouse JDBC Bridge em um ambiente separado e se conectar ao ClickHouse Cloud usando a função [remoteSecure](/pt-BR/reference/functions/table-functions/remote)
    </Note>
  </Step>

  <Step>
    #### Configure sua fonte de dados do Redshift

    Configure sua fonte de dados do Redshift para a ClickHouse JDBC Bridge. Por exemplo, `/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>
    #### Consulte sua instância do Redshift no ClickHouse

    Depois que a ClickHouse JDBC Bridge estiver implantada e em execução, você poderá começar a consultar sua instância do Redshift no 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 │ Mufutau   │ 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>
    #### Importe dados do Redshift para o ClickHouse

    A seguir, mostramos como importar dados usando uma instrução `INSERT INTO ... SELECT`

    ```sql theme={null}
    # CRIAÇÃO DA TABELA com 3 colunas
    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">
  ## Pivotar dados do Redshift para o ClickHouse usando S3
</div>

Neste cenário, exportamos os dados para o S3 em um formato intermediário e, em uma segunda etapa, carregamos os dados do S3 no ClickHouse.

<Image img="/images/integrations/data-ingestion/redshift/pivot.png" size="md" alt="pivotar do Redshift usando S3" />

<div id="pros-1">
  ### Prós
</div>

* Tanto o Redshift quanto o ClickHouse têm recursos poderosos de integração com S3.
* Aproveita recursos já existentes, como o comando `UNLOAD` do Redshift e a função de tabela S3 / table engine do ClickHouse.
* Escala com facilidade graças às leituras paralelas e ao alto throughput de/para o S3 no ClickHouse.
* Pode aproveitar formatos avançados e compactados, como o Apache Parquet.

<div id="cons">
  ### Desvantagens
</div>

* Duas etapas no processo (exportar do Redshift e depois carregar no ClickHouse).

<div id="tutorial">
  ### Tutorial
</div>

<Steps>
  <Step>
    #### Exporte os dados para um bucket do S3 usando UNLOAD

    Usando o recurso [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) do Redshift, exporte os dados para um bucket privado existente do S3:

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

    Isso gerará arquivos de partes contendo os dados brutos no S3.

    <Image img="/images/integrations/data-ingestion/redshift/s3-2.png" size="md" alt="Dados no S3" background="white" />
  </Step>

  <Step>
    #### Crie a tabela no ClickHouse

    Crie a tabela no ClickHouse:

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

    Como alternativa, o ClickHouse pode tentar inferir a estrutura da tabela usando `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')
    ```

    Isso funciona especialmente bem quando os dados estão em um formato que contém informações sobre tipos de dados, como Parquet.
  </Step>

  <Step>
    #### Carregue os arquivos do S3 no ClickHouse

    Carregue os arquivos do S3 no ClickHouse usando uma instrução `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>
      Este exemplo usou CSV como formato de pivot. No entanto, para cargas de trabalho de produção, recomendamos Apache Parquet como a melhor opção para grandes migrações, já que ele oferece compressão e pode reduzir custos de armazenamento, além de diminuir os tempos de transferência. (Por padrão, cada row group é comprimido com SNAPPY.) O ClickHouse também aproveita a organização colunar do Parquet para acelerar a ingestão de dados.
    </Note>
  </Step>
</Steps>
