Inserción de datos con ClickHouse Connect: uso avanzado
InsertContexts
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
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
insert_df— Inserta un DataFrame de Pandas como datos Native orientados a columnas. También admite nombres y tipos de columna explícitos o unInsertContextreutilizable.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 usardtypesbasados en Arrow.
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
datetime de Python en columnas DateTime o DateTime64, ClickHouse Connect los convierte en valores de época.
Objetos datetime con zona horaria
ClickHouse Connect usa el módulo
zoneinfo de la biblioteca estándar. El controlador ya no depende de pytz.Objetos datetime sin zona horaria
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 columnaDateTimeoDateTime64. Si la columna no tiene zona horaria, utiliza la zona horaria del servidor indicada cuando se conectó el Client.
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.
"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.
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
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.
AsyncClient, usa await con insert_file_async y los mismos argumentos:
await de raw_insert, por lo que el contenido del archivo se mantiene en memoria.