Saltar al contenido principal

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: 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 almacenamiento de objetos S3 con una lógica de «descargar y luego cargar»
En este tutorial usamos Redshift como fuente de datos. Sin embargo, los enfoques de migración que se presentan aquí no son exclusivos de Redshift, y se pueden seguir pasos similares con cualquier fuente de datos compatible.

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)

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 el ClickHouse JDBC Bridge para conectarse directamente a un clúster de Redshift desde una instancia de ClickHouse y ejecutar consultas INSERT INTO ... SELECT:

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
Aunque Redshift se basa en PostgreSQL, no es posible usar la función de tabla ni el motor de tabla de ClickHouse, ya que ClickHouse requiere PostgreSQL 9 o superior y la API de Redshift se basa en una versión anterior (8.x).

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

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
Si está usando ClickHouse Cloud, tendrá que ejecutar ClickHouse JDBC Bridge en un entorno independiente y conectarse a ClickHouse Cloud mediante la función remoteSecure
2

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

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

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.

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

1

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:Esto generará archivos parciales con los datos sin procesar en S3
2

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

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.)
En este ejemplo se usó CSV como formato intermedio. Sin embargo, para cargas de trabajo de producción, recomendamos Apache Parquet como la mejor opción para migraciones de gran tamaño, ya que incorpora compresión y puede reducir los costes de almacenamiento, además de acortar los tiempos de transferencia. (De forma predeterminada, cada grupo de filas se comprime con SNAPPY). ClickHouse también aprovecha la orientación por columnas de Parquet para acelerar la ingestión de datos.
Última modificación el 10 de junio de 2026