Problema
- Atomicidad de una sola tabla para cargas masivas: Un enfoque habitual consiste en insertar primero en claves parciales temporales, luego copiar los registros a la clave real y eliminar los registros temporales. Este enfoque tiene un rendimiento deficiente, especialmente en el paso de eliminación, que puede consumir más del 90 % del tiempo total de la operación.
- Consistencia entre varias tablas: Cuando un pipeline carga la Tabla A correctamente pero falla en la Tabla B, la Tabla A ya se confirmó y no puede revertirse. Los analistas que consultan ambas tablas ven datos desincronizados.
Antecedentes
INSERT se completa correctamente, todas las filas de ese bloque son visibles; si falla, no se ve ninguna. Sin embargo, no existe ningún mecanismo integrado para hacer commit de los datos de forma atómica entre múltiples inserciones o varias tablas.
Los comandos de manipulación de particiones (MOVE PARTITION TO TABLE, REPLACE PARTITION, ATTACH PARTITION FROM) actúan a nivel de metadatos cuando las tablas de origen y destino comparten la misma política de almacenamiento.
Esto significa que se ejecutan casi instantáneamente, independientemente del tamaño de los datos, lo que los convierte en bloques de construcción ideales para patrones de intercambio atómico.
Solución recomendada
Paso a paso para la atomicidad en una sola tabla
Crear una tabla de staging
Usa el mismo esquema, clave de partición,ORDER BY y política de almacenamiento que la tabla de producción.Insertar datos en la tabla de staging
Ejecuta la inserción en la tabla de staging en lugar de hacerlo en la tabla de producción.Si la inserción falla, trunca y reintenta
Trunca la tabla de staging y vuelve a ejecutar la carga. No se ha afectado ningún dato de producción.Si la inserción se realiza correctamente, mueve las particiones a producción
Para mover los datos a producción y eliminarlos de la tabla de staging, usaMOVE PARTITION.ATTACH PARTITION.Limpiar la tabla de staging
Una vez que se hayan movido todas las particiones, trunca la tabla de staging para dejarla vacía para la siguiente carga.Consistencia entre varias tablas
Requisitos y restricciones
MOVE PARTITION TO TABLE, REPLACE PARTITION y ATTACH PARTITION FROM, las tablas de origen y de destino deben tener:
- La misma estructura de columnas
- La misma clave de partición, la misma clave de
ORDER BYy la misma clave primaria - La misma política de almacenamiento
- La tabla de destino debe incluir todos los índices y las proyecciones de la tabla de origen
Ejemplo
Referencias
- Manipular particiones y partes
- Para obtener más información sobre esta estrategia, consulta la entrada del blog Potencia tus grandes cargas de datos en ClickHouse - Parte 3: cómo hacer resiliente una gran carga de datos.