Pular para o conteúdo principal

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: 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 JDBC Bridge
  3. pivotar usar armazenamento de objetos S3 com uma lógica de “descarregar e depois carregar”
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.

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)

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:

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

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

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
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
2

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
 }
}
3

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

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.

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

1

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:Isso gerará arquivos de partes contendo os dados brutos no S3.
2

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

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.)
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.
Última modificação em 10 de junho de 2026