Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Introdução

Amazon 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:

Opções de migração do Redshift para o ClickHouse

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

  1. enviar enviar dados para o ClickHouse usando uma ferramenta ou serviço de ETL/ELT de terceiros

  2. extrair extrair dados do Redshift com a ajuda da ClickHouse bridge

  3. pivotar usar armazenamento de objetos do S3 com uma lógica de "descarregar e depois carregar"

Enviar dados do Redshift para o ClickHouse

No cenário de envio, a ideia é usar uma ferramenta ou serviço de terceiros (seja código personalizado ou um ETL/ELT) para enviar seus dados à sua instância do ClickHouse. Por exemplo, você pode usar um software como o Airbyte para transferir dados entre sua instância do Redshift (como origem) e o ClickHouse como destino (veja nosso guia de integração do Airbyte)

enviar do Redshift para o ClickHouse

Vantagens

  • 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).

Desvantagens

  • 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.

Extrair dados do Redshift para o ClickHouse

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:

extração do Redshift para o ClickHouse

Prós

  • 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

Desvantagens

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

Tutorial

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.

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

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

{
 "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
 }
}

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

SELECT *
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 │ Mufutau   │ 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.

Importe dados do Redshift para o ClickHouse

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

# CRIAÇÃO DA TABELA com 3 colunas
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.)

Pivotar dados do Redshift para o ClickHouse usando S3

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.

pivotar do Redshift usando S3

Prós

  • 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.

Desvantagens

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

Tutorial

Exporte os dados para um bucket do S3 usando UNLOAD

Usando o recurso UNLOAD do Redshift, exporte os dados para um bucket privado existente do S3:

UNLOAD do Redshift para o S3

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

Dados no S3

Crie a tabela no ClickHouse

Crie a tabela no ClickHouse:

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:

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.

Carregue os arquivos do S3 no ClickHouse

Carregue os arquivos do S3 no ClickHouse usando uma instrução 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.)
Navigation