Skip to main content

Inserción de datos con ClickHouse Connect: uso avanzado

InsertContexts

ClickHouse Connect ejecuta las inserciones en Native format, los métodos insert e insert_df, dentro de un InsertContext. Los métodos insert_arrow, insert_df_arrow y raw_insert envían sus payloads directamente y no usan ninguno. 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, excepto context en sí. 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

Los formatos de escritura están implementados para un número limitado de tipos. En la mayoría de los casos, ClickHouse Connect determina automáticamente el formato de escritura correcto para una columna a partir de su primer valor de datos no nulo. Por ejemplo, cuando el primer valor de una columna DateTime es un entero, el Client lo trata como un segundo desde la época. Normalmente no es necesario aplicar una sobrescritura a un formato de escritura, pero los métodos de clickhouse_connect.datatypes.format pueden establecer uno de forma global. Las envolturas de contenedor, como Array, Nullable y LowCardinality, conservan el comportamiento de formato del tipo de elemento.

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 como datos Native orientados a columnas. También admite nombres y tipos de columna explícitos o un InsertContext reutilizable.
  • insert_arrow — Inserta una tabla de PyArrow usando el formato de entrada Arrow de ClickHouse.
  • insert_df_arrow — Inserta un DataFrame de Pandas respaldado por Arrow o un DataFrame de Polars. Todas las columnas de Pandas deben usar dtypes basados en Arrow.
Los tres métodos aceptan database, settings y transport_settings HTTP por solicitud.
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)

Crear una tabla a partir de un esquema de PyArrow

create_table_from_arrow_schema genera una instrucción CREATE TABLE a partir de campos escalares comunes de Arrow. La correspondencia abarca enteros con y sin signo, valores de coma flotante, booleanos, cadenas, fechas y marcas de tiempo. Crea intencionadamente columnas de ClickHouse que no admiten NULL y genera TypeError para tipos de Arrow no compatibles, así que revise el DDL generado antes de ejecutarlo.

Zonas horarias

Al insertar objetos datetime de Python en columnas DateTime o DateTime64, ClickHouse Connect los convierte en valores de época.

Objetos datetime con zona horaria

Los objetos con zona horaria conservan el instante representado. La zona horaria de origen no tiene que coincidir con la zona horaria declarada en la columna de ClickHouse.
ClickHouse Connect usa el módulo zoneinfo de la biblioteca estándar. El controlador ya no depende de pytz.

Objetos datetime sin zona horaria

La configuración global naive_datetime_insert controla la inserción de objetos nativos de Python con valores datetime sin zona horaria. También se aplica a las cadenas ISO sin zona horaria aceptadas por las columnas DateTime64.
  • "local" es el valor predeterminado en 1.x. Python interpreta el valor en la zona horaria del proceso al llamar a .timestamp(). Esto conserva el comportamiento existente.
  • "server" interpreta el valor como hora local en la zona horaria declarada por la columna DateTime o DateTime64. Si la columna no tiene zona horaria, utiliza la zona horaria del servidor indicada cuando se conectó el Client.
Configure la opción antes de realizar una inserción. Se lee al serializar cada columna de inserción nativa que contiene objetos datetime de Python o cadenas ISO DateTime64, por lo que el cambio se aplica a los Clients existentes y a los contextos de inserción reutilizables.
Con "server", ClickHouse Connect asigna el tzinfo de destino antes de convertir el valor a una época. Para las zonas horarias IANA, sigue las reglas de la biblioteca estándar para las transiciones de horario de verano. En una superposición de otoño se usa el valor fold de datetime. El valor predeterminado fold=0 selecciona el desplazamiento anterior a la transición, mientras que fold=1 selecciona el posterior. En un salto de primavera se usa la misma selección de desplazamiento, y no se rechaza ni se normaliza. Las horas de reloj inexistentes durante un salto de primavera pueden no conservarse en un recorrido de ida y vuelta mediante un parámetro de consulta en modo de reloj, ya que el análisis de texto de ClickHouse puede seleccionar un desplazamiento diferente. Use un datetime con zona horaria o una hora de reloj válida cuando el instante sea importante. La opción solo se aplica a inserciones nativas de objetos Python de valores datetime y cadenas ISO sin zona horaria aceptadas por DateTime64. Las columnas de NumPy y Pandas con dtype datetime64 sin zona horaria conservan su conversión actual de hora de reloj UTC. Para representar un instante específico independientemente de cualquiera de los modos, asigne la zona horaria deseada o proporcione explícitamente un entero de época.
Los parámetros de consulta datetime sin zona horaria usan la configuración independiente naive_datetime_binding. De forma predeterminada, el modo "wall" envía los campos de hora local sin conversión a la hora local del host. Consulte la sección Argumento Parameters.

Columnas DateTime con metadatos de zona horaria

Las columnas de ClickHouse pueden declarar metadatos de zona horaria, por ejemplo DateTime('America/Denver') o DateTime64(3, 'Asia/Tokyo'). Estos metadatos controlan cómo se presentan los valores al consultarlos. Al insertar un valor con zona horaria, ClickHouse Connect conserva el instante representado. Para un valor sin zona horaria, la configuración naive_datetime_insert controla si se usa la zona horaria del proceso o la de la columna. Al consultar, el resultado usa la zona horaria de la columna, a menos que se proporcione una sobrescritura por columna con el argumento column_tzs. El argumento query_tz no sobrescribe la zona horaria declarada de la columna.

Inserciones de archivos

clickhouse_connect.driver.tools.insert_file carga un archivo local en una tabla existente por streaming y delega el análisis en ClickHouse. La configuración del formato de entrada, como input_format_allow_errors_ratio y input_format_allow_errors_num, puede pasarse mediante settings.
Para un AsyncClient, usa await con insert_file_async y los mismos argumentos:
La función auxiliar async lee el archivo en un hilo de trabajo antes de hacer await de raw_insert, por lo que el contenido del archivo se mantiene en memoria.
Última modificación el 14 de agosto de 2026