WClickHouse permite transferencias columnares zero-copy entre Python y ClickHouse
El nuevo paquete wclickhouse integra Apache Arrow para evitar la serialización fila a fila y reduce la carga de memoria y el tiempo de ingestión.

WClickHouse: Transferencia columnar zero‑copy
En la serie técnica WClickHouse Open Source, William Rodríguez presenta wclickhouse, un módulo que permite enviar tablas de Apache Arrow directamente a ClickHouse sin pasar por la serialización de tuplas ni JSON. La operación se realiza a través de la función insert_arrow().
Problemas que soluciona
- Serializar millones de números en Python genera un cuello de botella.
- El recolector de basura de CPython puede congelar pipelines durante la ingestión.
- Se duplica el dataset en el heap, provocando un alto consumo de RAM.
Uso básico
import pyarrow as pa
from wclickhouse import WClickHouse
arrow_table = pa.table({"id": [1, 2, 3], "metric": [99.4, 98.1, 99.9]})
db = WClickHouse(MetricModel, db_config)
# Inserta la tabla sin iterar sobre filas
db.insert_arrow(arrow_table)
# Consulta y obtiene el resultado como Arrow Table
result_arrow = db.query_arrow("SELECT * FROM metricmodel WHERE metric > 99.0")
Ventajas
- Memoria Zero‑Copy: el formato columnar viaja directamente por el socket.
- Velocidad: millones de filas se transmiten en segundos, comparado con la serialización fila a fila.
- Resultados en Arrow: la consulta devuelve un
pyarrow.Table, listo para análisis posterior.
Compatibilidad y pruebas
El paquete está probado contra instancias reales de ClickHouse con más del 95 % de cobertura de tests. Es compatible con Python 3.9‑3.14, Apache Arrow y Pydantic v2.
Disponibilidad
- Repositorio en GitHub: https://github.com/wisrovi/wclickhouse
- Paquete en PyPI: https://pypi.org/project/wclickhouse
Por qué importa
Para arquitectos de datos y administradores que manejan pipelines OLAP en Python, la eliminación del proceso de serialización fila a fila representa un ahorro de tiempo y memoria significativo. La adopción de wclickhouse puede reducir la latencia de ingestión de datos en un factor de 5‑10 en entornos de producción, y facilita el flujo de datos entre sistemas analíticos sin tocar la capa de aplicación.
