Esta es la Parte 1 de una guía sobre la migración de PostgreSQL a ClickHouse. Mediante un ejemplo práctico, muestra cómo llevar a cabo la migración de forma eficiente con un enfoque de replicación en tiempo real (CDC). Muchos de los conceptos tratados también se aplican a las transferencias masivas manuales de datos de PostgreSQL a ClickHouse.
Conjunto de datos
post, vote, user, comment y badge registrados en Stack Overflow desde 2008 hasta abril de 2024. El esquema de PostgreSQL para estos datos se muestra a continuación:
Los comandos DDL para crear las tablas en PostgreSQL están disponibles aquí.
Este esquema, aunque no sea necesariamente el más óptimo, aprovecha varias características populares de PostgreSQL, incluidas las claves primarias, las claves foráneas, el particionamiento y los índices.
Migraremos cada uno de estos conceptos a sus equivalentes en ClickHouse.
Para quienes deseen cargar este conjunto de datos en una instancia de PostgreSQL para probar los pasos de migración, hemos puesto a disposición los datos para su descarga en formato pg_dump junto con el DDL, y a continuación se muestran los comandos posteriores para cargar los datos:
Aunque en nuestros resultados de ejemplo usamos el conjunto de datos completo para mostrar las diferencias de rendimiento entre Postgres y ClickHouse, todos los pasos documentados a continuación son funcionalmente idénticos con el subconjunto más pequeño. Los usuarios que quieran cargar el conjunto de datos completo en Postgres pueden consultarlo aquí. Debido a las restricciones de clave foránea impuestas por el esquema anterior, el conjunto de datos completo para PostgreSQL solo contiene filas que cumplen con la integridad referencial. Si es necesario, una versión en Parquet, sin esas restricciones, puede cargarse fácilmente directamente en ClickHouse.
Migración de datos
Replicación en tiempo real (CDC)
users en ClickHouse con ClickPipes.
Carga masiva manual con actualizaciones periódicas
- Funciones de tabla - Uso de la función de tabla de Postgres en ClickHouse para hacer
SELECTde datos desde Postgres eINSERTarlos en una tabla de ClickHouse. Es adecuado para cargas masivas de conjuntos de datos de hasta varios cientos de GB. - Exportaciones - Exportación a formatos intermedios, como CSV o un archivo de script SQL. Después, estos archivos pueden cargarse en ClickHouse desde el cliente mediante la cláusula
INSERT FROM INFILEo usando object storage y sus funciones asociadas, es decir, s3, gcs.
DESCRIBE con la función de tabla de Postgres. El siguiente comando describe la tabla posts en PostgreSQL; modifícalo según tu entorno:
Query
Query
INSERT INTO SELECT, leyendo los datos de Postgres e insertándolos en ClickHouse:
Query
WHERE al SELECT. Este enfoque también puede usarse para soportar actualizaciones si se garantiza que estas actualizan la misma columna. Sin embargo, para soportar borrados será necesaria una recarga completa, lo que puede resultar difícil de lograr a medida que la tabla crece.
Mostramos una carga inicial y una carga incremental usando CreationDate (suponemos que este se actualiza si se actualizan las filas)..
ClickHouse trasladará al servidor PostgreSQL cláusulasWHEREsimples, como=,!=,>,>=,<,<=eIN. Así, las cargas incrementales pueden realizarse de forma más eficiente al asegurarse de que exista un índice en las columnas usadas para identificar el conjunto de cambios.
Un posible método para detectar operacionesHaz clic aquí para la Parte 2UPDATEal usar replicación de consultas consiste en utilizar la columna del sistemaXMIN(identificadores de transacción) como marca de agua; un cambio en esta columna indica que hubo una modificación y, por tanto, puede aplicarse a la tabla de destino. Los usuarios que empleen este enfoque deben tener en cuenta que los valores deXMINpueden volver a empezar desde el principio y que las comparaciones requieren un escaneo completo de la tabla, lo que complica el seguimiento de cambios.