¿Por qué transmitir datos de SQL Server a ClickHouse?
- Informes internos sin ralentizar las aplicaciones de producción
- Dashboards de cara al cliente que deben ser rápidos y estar siempre actualizados
- Streaming de eventos, como mantener al día los logs de actividad de los usuarios para analítica
Lo que necesitarás para empezar
Requisitos previos
- Una instancia de SQL Server en funcionamiento
- Para este tutorial, usamos AWS RDS para SQL Server, pero cualquier instancia moderna de SQL Server sirve.Configurar AWS SQL Server desde cero.
- Una instancia de ClickHouse
- Autogestionada o en la nube.Configurar ClickHouse desde cero.
- Streamkap
- Esta herramienta será la base de tu pipeline de streaming de datos.
Información de la conexión
- La dirección del servidor, el puerto, el nombre de usuario y la contraseña de SQL Server. Se recomienda crear un usuario y un rol independientes para que Streamkap pueda acceder a tu base de datos de SQL Server.Consulta nuestra documentación sobre la configuración.
- La dirección del servidor, el puerto, el nombre de usuario y la contraseña de ClickHouse. Las listas de acceso IP de ClickHouse determinan qué servicios pueden conectarse a tu base de datos de ClickHouse.Sigue las instrucciones aquí.
- Las tablas que quieres sincronizar; por ahora, empieza con una sola
1
Creación de una fuente de datos de SQL Server en Streamkap
¡Vamos allá!Empezaremos configurando la conexión de la fuente. Así es como Streamkap sabe de dónde obtener los cambios.Así se hace:
- Abre Streamkap y ve a la sección de fuentes.
- Crea una fuente nueva.
- Asígnale un nombre fácil de reconocer (p. ej., sqlserver-demo-source).
- Completa los detalles de conexión de tu SQL Server:
- Host (p. ej., your-db-instance.rds.amazonaws.com)
- Puerto (el predeterminado para SQL Server es 3306)
- Nombre de usuario y contraseña
- Nombre de la base de datos
Qué ocurre internamente
Cuando lo configures, Streamkap se conectará a tu SQL Server y detectará las tablas. Para esta demo, elegiremos una tabla con datos que ya estén llegando, como eventos o transacciones.2
Añadir un destino de ClickHouse en Streamkap
Ahora configuraremos el destino al que enviaremos todos estos datos.Al igual que con la fuente, crearemos un destino con los datos de conexión de ClickHouse.
Pasos:
- Ve a la sección de destinos en Streamkap.
- Agrega un destino nuevo: elige ClickHouse como tipo de destino.
- Introduce la información de tu ClickHouse:
- Host
- Puerto (el valor predeterminado es 9000)
- Nombre de usuario y contraseña
- Nombre de la base de datos
Modo upsert: ¿qué es?
Este es un paso importante: queremos usar el modo “upsert” de ClickHouse, que (internamente) usa el engine ReplacingMergeTree en ClickHouse. Esto nos permite fusionar los registros entrantes de forma eficiente y gestionar las actualizaciones después de ingestar los datos, mediante lo que ClickHouse llama “part merging”.- Esto garantiza que tu tabla de destino no se llene de duplicados cuando haya cambios en SQL Server.
Gestión de la evolución del esquema
A veces, ClickHouse y SQL Server no tienen las mismas columnas, sobre todo cuando tu aplicación está en producción y los desarrolladores siguen agregando columnas sobre la marcha.- Buenas noticias: Streamkap puede gestionar la evolución básica del esquema. Eso significa que, si agregas una columna nueva en SQL Server, también aparecerá en ClickHouse.
3
Configura el pipeline en Streamkap
Con el origen y el destino configurados, es hora de la parte divertida: ¡poner tus datos en streaming!
Configuración de la canalización
- Ve a la pestaña Pipelines en Streamkap.
- Crea una canalización nueva.
-
Selecciona tu origen de SQL Server (
sqlserver-demo-source). -
Selecciona tu destino de ClickHouse (
clickhouse-tutorial-destination). -
Elige la tabla que quieres transmitir; por ejemplo,
events. - Configúrala para Change Data Capture (CDC).
- Para esta ejecución, transmitiremos datos nuevos (si quieres, al principio puedes omitir el backfill y centrarte en los eventos de CDC).
¿Deberías hacer backfill?
Puede que te preguntes: ¿debería cargar datos antiguos?En muchos casos de analítica, puede que solo quieras empezar transmitiendo los cambios a partir de ahora, pero siempre puedes volver atrás y cargar también datos más antiguos.Por ahora, simplemente elige “don’t backfill”, a menos que tengas una necesidad específica.4
Observe el flujo de datos
¡Ahora tu pipeline está configurado y activo!Esto es lo que sucede:Es de esperar cierto retraso en escenarios de alta carga, pero en la mayoría de los casos de uso el streaming es casi en tiempo real.
- A medida que llegan nuevos datos a la tabla de origen en SQL Server, el pipeline de Streamkap captura el cambio y lo envía a ClickHouse.
- ClickHouse (gracias a ReplacingMergeTree y a la combinación de partes) ingesta estas filas y fusiona las actualizaciones.
- El esquema se mantiene al día: agrega columnas en SQL Server y también aparecerán en ClickHouse.
Entre bastidores: ¿qué hace realmente Streamkap?
- Streamkap supervisa el registro binario de SQL Server (el mismo registro que se usa para la replicación).
- En cuanto insertas, actualizas o eliminas una fila en tu tabla, Streamkap captura el evento.
- Convierte el evento en algo que ClickHouse puede entender y lo envía, aplicando los cambios al instante en tu base de datos analítica.
Opciones avanzadas
Modos Upsert vs. Insert
- Insert Mode: Cada fila nueva se añade; incluso si es una actualización, obtendrás duplicados.
- Upsert Mode: Las actualizaciones de las filas existentes sobrescriben los datos ya presentes, mucho mejor para mantener los análisis actualizados y limpios.
Gestión de cambios de esquema
- ¿Añadir una columna nueva a tu tabla operativa? Streamkap la detectará y la añadirá también en ClickHouse.
- ¿Eliminar una columna? Según la configuración, puede que necesites una migración, pero la mayoría de las incorporaciones se realizan sin problemas.
Supervisión en producción: seguimiento del pipeline
Comprobación del estado del pipeline
- Ver el retraso del pipeline (¿qué tan actualizados están tus datos?)
- Supervisar el recuento de filas y el rendimiento
- Recibir alertas si algo no va bien
Métricas comunes que conviene vigilar
- Retraso: ¿Cuánto se ha rezagado ClickHouse respecto a SQL Server?
- Rendimiento: Filas por segundo
- Tasa de errores: Debería ser cercana a cero
Pasar a producción: consultar ClickHouse
Próximos pasos y profundizaciones
- Configurar flujos filtrados (sincronizar solo algunas tablas/columnas)
- Hacer streaming desde múltiples orígenes hacia una única base de datos analítica
- Combinar esto con S3/lagos de datos para almacenamiento en frío
- Automatizar las migraciones de esquema cuando cambies las tablas
- Proteger tu pipeline con SSL y reglas de firewall
FAQ y solución de problemas
Para terminar
- Upsert vs. Insert y los pormenores de ambos
- Latencia de extremo a extremo: ¿qué tan rápido puedes obtener tu vista analítica final?
- Optimización del rendimiento y throughput
- Dashboards reales sobre esta stack