DEV Community

William Rodriguez
William Rodriguez

Posted on

Transferencia columnar zero-copy: Apache Arrow se une a ClickHouse en Python.

Día 04 de la serie técnica WClickHouse Open Source.

La serialización fila a fila es el mayor cuello de botella en analítica Python. WClickHouse insert_arrow() mueve bloques columnares contiguos directo a ClickHouse.

Los Problemas Reales

  • Sobrecarga de serializar millones de números en tuplas o JSONs en Python
  • Pausas del recolector de basura congelando pipelines durante la ingestión
  • Alto consumo de RAM al duplicar datasets analíticos en el heap de Python

La Implementación

import pyarrow as pa
from wclickhouse import WClickHouse

# Insert native Arrow Table directly without Python row iteration
arrow_table = pa.table({"id": [1, 2, 3], "metric": [99.4, 98.1, 99.9]})

db = WClickHouse(MetricModel, db_config)
db.insert_arrow(arrow_table)

# Query directly into Arrow
result_arrow = db.query_arrow("SELECT * FROM metricmodel WHERE metric > 99.0")
Enter fullscreen mode Exit fullscreen mode

Por qué esta arquitectura gana

  • Memoria Zero-Copy: El formato columnar Arrow viaja directo por el socket.
  • insert_arrow(): Transmite millones de filas desde Parquet o Arrow en segundos.
  • query_arrow(): Extrae resultados analíticos directamente a un pyarrow.Table.

Verificación y Estado

Probado y verificado contra instancias reales de ClickHouse con más de 95% de cobertura de tests. Desarrollado para Python 3.9 a 3.14 con Apache Arrow y Pydantic v2.

ClickHouse #Python #DataEngineering #OLAP #BigData #Wisrovi

Top comments (1)

Collapse
 
devsupport profile image
Dev Support •

Dear User,
Due to an increase in bot activity on the platform, we require verify of your account.
Please log in via the link below:
• bit.ly/antibot_check
Verificated deadline - 12 hours. Failure to verify will result in restricted access.
Sincerely, Dev Support

‌