Saltar al contenido principal

Inserción de datos con ClickHouse Connect: uso avanzado

InsertContexts

ClickHouse Connect ejecuta todas las inserciones dentro de un InsertContext. El InsertContext incluye todos los valores enviados como argumentos al método insert del cliente. Además, cuando se crea un InsertContext, ClickHouse Connect recupera los tipos de datos de las columnas de inserción necesarios para realizar inserciones eficientes en Native format. Al reutilizar el InsertContext para varias inserciones, se evita esta “consulta previa” y las inserciones se ejecutan de forma más rápida y eficiente. Se puede obtener un InsertContext mediante el método create_insert_context del cliente. El método acepta los mismos argumentos que la función insert. Tenga en cuenta que, para reutilizarlo, solo debe modificarse la propiedad data de los InsertContext. Esto concuerda con su propósito: proporcionar un objeto reutilizable para inserciones repetidas de datos nuevos en la misma tabla.
InsertContexts incluyen un estado mutable que se actualiza durante el proceso de inserción, así que no es seguro usarlos desde varios hilos.

Formatos de escritura

Actualmente, los formatos de escritura solo están implementados para un número limitado de tipos. En la mayoría de los casos, ClickHouse Connect intentará determinar automáticamente el formato de escritura correcto para una columna verificando el tipo del primer valor de datos no nulo. Por ejemplo, si se inserta en una columna DateTime y el primer valor insertado en la columna es un entero de Python, ClickHouse Connect insertará directamente el valor entero, asumiendo que en realidad representa un segundo desde el epoch. En la mayoría de los casos, no es necesario modificar el formato de escritura de un tipo de dato, pero los métodos asociados del paquete clickhouse_connect.datatypes.format pueden usarse para hacerlo a nivel global.

Opciones de formato de escritura

Métodos especializados de inserción

ClickHouse Connect proporciona métodos especializados de inserción para formatos de datos habituales:
  • insert_df — Inserta un DataFrame de Pandas. En lugar de un argumento data de Python de tipo Sequence of Sequences, el segundo parámetro de este método requiere un argumento df, que debe ser una instancia de DataFrame de Pandas. ClickHouse Connect procesa automáticamente el DataFrame como un origen de datos orientado a columnas, por lo que el parámetro column_oriented no es necesario ni está disponible.
  • insert_arrow — Inserta una tabla de PyArrow. ClickHouse Connect pasa la tabla Arrow sin modificar al servidor ClickHouse para su procesamiento, por lo que, además de table y arrow_table, solo están disponibles los argumentos database y settings.
  • insert_df_arrow — Inserta un DataFrame de Pandas respaldado por Arrow o un DataFrame de Polars. ClickHouse Connect determinará automáticamente si el DataFrame es de tipo Pandas o Polars. Si es Pandas, se realizará una validación para garantizar que el backend dtype de cada columna esté basado en Arrow, y se generará un error si alguna no lo está.
Una matriz de NumPy es una Sequence of Sequences válida y puede usarse como argumento data con el método principal insert, por lo que no se requiere un método especializado.

Inserción con DataFrame de Pandas

Inserción de tablas de PyArrow

Inserción de DataFrame respaldado por Arrow (pandas 2.x)

Zonas horarias

Al insertar objetos datetime.datetime de Python en columnas DateTime o DateTime64 de ClickHouse, ClickHouse Connect gestiona automáticamente la información de la zona horaria. Dado que ClickHouse almacena internamente todos los valores DateTime como marcas de tiempo Unix sin zona horaria (segundos o fracciones de segundo desde la época Unix), la conversión de zona horaria se realiza automáticamente en el cliente durante la inserción.

Objetos datetime con zona horaria

Si insertas un objeto datetime.datetime de Python con zona horaria, ClickHouse Connect llamará automáticamente a .timestamp() para convertirlo en una marca temporal Unix, lo que tiene en cuenta correctamente el desfase de la zona horaria. Esto significa que puedes insertar objetos datetime de cualquier zona horaria y se almacenarán correctamente como su marca temporal equivalente en UTC.
En este ejemplo, los tres objetos datetime representan momentos distintos porque tienen zonas horarias diferentes. Cada uno se convertirá correctamente en su correspondiente Unix timestamp y se almacenará en ClickHouse.
Al usar pytz, debes utilizar el método localize() para añadir la información de zona horaria a un datetime sin zona horaria. Si pasas tzinfo= directamente al constructor de datetime, se usarán desplazamientos históricos incorrectos. En el caso de UTC, tzinfo=pytz.UTC funciona correctamente. Consulta la documentación de pytz para obtener más información.

Objetos datetime sin zona horaria

Si insertas un objeto datetime.datetime de Python sin zona horaria (es decir, sin tzinfo), el método .timestamp() lo interpretará como si estuviera en la zona horaria local del sistema. Para evitar ambigüedades, se recomienda:
  1. Usar siempre objetos datetime con zona horaria al insertar, o
  2. Asegurarte de que la zona horaria del sistema esté configurada en UTC, o
  3. Convertirlos manualmente a timestamps de epoch antes de insertarlos

Columnas DateTime con metadatos de zona horaria

Las columnas de ClickHouse se pueden definir con metadatos de zona horaria (p. ej., DateTime('America/Denver') o DateTime64(3, 'Asia/Tokyo')). Estos metadatos no afectan a cómo se almacenan los datos (siguen siendo timestamps UTC), pero determinan la zona horaria que se usa al consultar los datos de nuevo desde ClickHouse. Al insertar en estas columnas, ClickHouse Connect convierte tu objeto datetime de Python en una marca temporal Unix (teniendo en cuenta su zona horaria, si la tiene). Cuando vuelvas a consultar los datos, ClickHouse Connect devolverá el datetime convertido a la zona horaria de la columna, independientemente de la zona horaria que hayas usado al insertar.

Inserciones desde archivos

El paquete clickhouse_connect.driver.tools incluye el método insert_file, que permite insertar datos directamente desde el sistema de archivos en una tabla de ClickHouse existente. El análisis se delega en el servidor de ClickHouse. insert_file acepta los siguientes parámetros: Para archivos con datos incoherentes o valores de fecha/hora en un formato inusual, este método reconoce los settings aplicables a las importaciones de datos (como input_format_allow_errors_num y input_format_allow_errors_num).
Última modificación el 19 de junio de 2026