Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Guía de migración de Amazon Redshift a ClickHouse

Introducción

Amazon Redshift es una popular solución de almacenamiento de datos en la nube que forma parte de la oferta de Amazon Web Services. Esta guía presenta distintos enfoques para migrar datos desde una instancia de Redshift a ClickHouse. Cubriremos tres opciones:

Opciones de migración de Redshift a ClickHouse

Desde el punto de vista de la instancia de ClickHouse, puede optar por lo siguiente:

  1. PUSH enviar datos a ClickHouse mediante una herramienta o servicio ETL/ELT de terceros

  2. PULL extraer datos de Redshift aprovechando ClickHouse JDBC Bridge

  3. PIVOT usar S3 object storage con una lógica de «descargar y luego cargar»

Enviar datos desde Redshift a ClickHouse

En el escenario push, la idea es aprovechar una herramienta o un servicio de terceros (ya sea código personalizado o un ETL/ELT) para enviar tus datos a tu instancia de ClickHouse. Por ejemplo, puedes usar un software como Airbyte para mover datos entre tu instancia de Redshift (como origen) y ClickHouse como destino (consulta nuestra guía de integración de Airbyte)

PUSH de Redshift a ClickHouse

Ventajas

  • Permite aprovechar el catálogo existente de conectores del software ETL/ELT.
  • Incluye capacidades integradas para mantener los datos sincronizados (lógica de append/overwrite/increment).
  • Admite escenarios de transformación de datos (por ejemplo, consulte nuestra guía de integración para dbt).

Contras

  • Debe configurar y mantener una infraestructura de ETL/ELT.
  • Introduce un componente de terceros en la arquitectura que puede convertirse en un posible cuello de botella para la escalabilidad.

Extraer datos de Redshift a ClickHouse

En el escenario Pull, la idea es aprovechar ClickHouse JDBC Bridge para conectarse directamente a un clúster de Redshift desde una instancia de ClickHouse y ejecutar consultas INSERT INTO ... SELECT:

PULL de Redshift a ClickHouse

Ventajas

  • Genérico para todas las herramientas compatibles con JDBC
  • Una solución elegante para consultar múltiples fuentes de datos externas desde ClickHouse

Desventajas

  • Requiere una instancia de ClickHouse JDBC Bridge, que puede convertirse en un posible cuello de botella para la escalabilidad

Tutorial

Para usar esta opción, debe configurar ClickHouse JDBC Bridge. ClickHouse JDBC Bridge es una aplicación Java independiente que gestiona la conectividad JDBC y actúa como proxy entre la instancia de ClickHouse y los orígenes de datos. Para este tutorial, utilizamos una instancia de Redshift precargada con una base de datos de ejemplo.

Desplegar ClickHouse JDBC Bridge

Despliegue ClickHouse JDBC Bridge. Para más información, consulte nuestra guía del usuario sobre JDBC para orígenes de datos externos

Configurar su origen de datos de Redshift

Configure su origen de datos de Redshift para ClickHouse JDBC Bridge. Por ejemplo, /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
 }
}

Consultar su instancia de Redshift desde ClickHouse

Una vez que ClickHouse JDBC Bridge esté desplegado y en ejecución, puede empezar a consultar su instancia de Redshift desde 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.

Importar datos de Redshift a ClickHouse

A continuación, mostramos cómo importar datos mediante una sentencia INSERT INTO ... SELECT

# CREACIÓN DE LA TABLA con 3 columnas
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.)

PIVOT de datos de Redshift a ClickHouse mediante S3

En este escenario, exportamos los datos a S3 en un formato PIVOT intermedio y, en un segundo paso, los cargamos desde S3 en ClickHouse.

PIVOT de Redshift mediante S3

Ventajas

  • Tanto Redshift como ClickHouse cuentan con potentes funciones de integración con S3.
  • Aprovecha funciones ya existentes, como el comando UNLOAD de Redshift y la función de tabla / el motor de tabla S3 de ClickHouse.
  • Escala sin problemas gracias a las lecturas en paralelo y al alto rendimiento de ClickHouse al leer y escribir en S3.
  • Puede aprovechar formatos sofisticados y comprimidos como Apache Parquet.

Desventajas

  • Dos pasos en el proceso (exportar desde Redshift y luego cargar en ClickHouse).

Tutorial

Exporta los datos a un bucket de S3 con UNLOAD

Usa la función UNLOAD de Redshift para exportar los datos a un bucket privado de S3 existente:

UNLOAD de Redshift a S3

Esto generará archivos parciales con los datos sin procesar en S3

Datos en S3

Crea la tabla en ClickHouse

Crea la tabla en ClickHouse:

CREATE TABLE users
(
  username String,
  firstname String,
  lastname String
)
ENGINE = MergeTree
ORDER BY username

Como alternativa, ClickHouse puede intentar inferir la estructura de la tabla mediante 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')

Esto funciona especialmente bien cuando los datos están en un formato que incluye información sobre los tipos de datos, como Parquet.

Carga archivos de S3 en ClickHouse

Carga los archivos de S3 en ClickHouse mediante una sentencia 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