Se recomienda usar argumentos con nombre en la mayoría de los métodos de la API, dado el número de argumentos posibles, la mayoría de ellos opcionales.Los métodos que no se documentan aquí no se consideran parte de la API y pueden eliminarse o modificarse.
Inicialización del cliente
clickhouse_connect.driver.client proporciona la interfaz principal entre una aplicación de Python y el servidor de bases de datos ClickHouse. Utilice la función clickhouse_connect.get_client para obtener una instancia de Client, que acepta los siguientes argumentos:
Argumentos de conexión
Argumentos de HTTPS/TLS
Argumento settings
settings de get_client se utiliza para pasar al servidor ajustes de ClickHouse adicionales en cada solicitud del cliente. Ten en cuenta que, en la mayoría de los casos, los usuarios con acceso readonly=1 no pueden modificar los ajustes enviados con una consulta, por lo que ClickHouse Connect omitirá esos ajustes en la solicitud final y registrará una advertencia. Los siguientes ajustes solo se aplican a las consultas/sesiones HTTP que usa ClickHouse Connect y no están documentados como ajustes generales de ClickHouse.
Para ver otros ajustes de ClickHouse que pueden enviarse con cada consulta, consulta la documentación de ClickHouse.
Ejemplos de creación de clientes
- Sin parámetros, un cliente de ClickHouse Connect se conectará al puerto HTTP predeterminado en
localhost, con el usuariodefaulty sin contraseña:
- Conectarse a un servidor externo de ClickHouse con HTTPS
- Conectarse con un ID de sesión y otros parámetros de conexión personalizados, así como ajustes de ClickHouse.
Ciclo de vida del cliente y buenas prácticas
Principios básicos
- Reutiliza los clientes: Crea los clientes una sola vez al iniciar la aplicación y reutilízalos durante toda su vida útil
- Evita crearlos con frecuencia: No crees un cliente nuevo para cada consulta o solicitud (esto desperdicia cientos de milisegundos por operación)
- Limpia correctamente: Cierra siempre los clientes al apagar la aplicación para liberar los recursos del pool de conexiones
- Compártelos cuando sea posible: Un solo cliente puede gestionar muchas consultas concurrentes a través de su pool de conexiones (consulta las notas sobre hilos más abajo)
Patrones básicos
Aplicaciones multihilo
Limpieza adecuada
client.close() elimina el cliente y cierra las conexiones HTTP agrupadas solo cuando el cliente tiene su propio administrador de pools (por ejemplo, cuando se crea con opciones personalizadas de TLS/proxy). Para el pool compartido predeterminado, usa client.close_connections() para limpiar proactivamente los sockets; de lo contrario, las conexiones se recuperan automáticamente por expiración por inactividad y al salir del proceso.
Cuándo usar varios clientes
- Servidores diferentes: un cliente por servidor o clúster de ClickHouse
- Credenciales diferentes: clientes separados para distintos usuarios o niveles de acceso
- Bases de datos diferentes: cuando necesite trabajar con varias bases de datos
- Sesiones aisladas: cuando necesite sesiones separadas para tablas temporales o ajustes específicos de la sesión
- Aislamiento por hilo: cuando los hilos necesiten sesiones independientes (como se muestra arriba)
Argumentos comunes de los métodos
parameters y settings. A continuación se describen estos argumentos de palabra clave.
Argumento parameters
query* y command del cliente ClickHouse Connect aceptan un argumento opcional de palabra clave parameters, que se utiliza para vincular expresiones de Python a una expresión de valor de ClickHouse. Hay dos tipos de vinculación disponibles.
Vinculación en el servidor
{<name>:<datatype>}. Para la vinculación en el servidor, el argumento parameters debe ser un diccionario de Python.
- Vinculación en el servidor con un diccionario de Python, un valor DateTime y un valor de cadena
Vinculación en el cliente
parameters debe ser un diccionario o una secuencia. La vinculación en el cliente utiliza el formato de cadenas estilo “printf” de Python para la sustitución de parámetros.
Ten en cuenta que, a diferencia de la vinculación en el servidor, la vinculación en el cliente no funciona con identificadores de bases de datos, como nombres de bases de datos, tablas o columnas, ya que el formato de estilo Python no puede distinguir entre los distintos tipos de cadenas y estos deben formatearse de forma diferente (backticks o comillas dobles para identificadores de bases de datos, comillas simples para valores de datos).
- Ejemplo con un diccionario de Python, un valor DateTime y escape de cadenas
- Ejemplo con una secuencia de Python (Tuple), Float64 e IPv4Address
Para vincular argumentos DateTime64 (tipos de ClickHouse con precisión de fracciones de segundo) se requiere uno de estos dos enfoques personalizados:
- Envuelva el valor
datetime.datetimede Python en la nueva clase DT64Param, por ejemplo:- Si usa un diccionario de valores de parámetros, añada la cadena
_64al nombre del parámetro
- Si usa un diccionario de valores de parámetros, añada la cadena
Argumento settings
settings, para pasar ajustes de usuario del servidor ClickHouse a la sentencia SQL incluida. El argumento settings debe ser un diccionario. Cada elemento debe contener el nombre de un ajuste de ClickHouse y su valor asociado. Ten en cuenta que los valores se convertirán en cadenas al enviarse al servidor como parámetros de consulta.
Al igual que con los ajustes a nivel de cliente, ClickHouse Connect descartará cualquier ajuste que el servidor marque como readonly=1, con el correspondiente mensaje de log. Los ajustes que se aplican solo a consultas a través de la interfaz HTTP de ClickHouse siempre son válidos. Esos ajustes se describen en la API get_client.
Ejemplo de uso de ajustes de ClickHouse:
Método command del cliente
Client.command para enviar consultas SQL al servidor de ClickHouse que normalmente no devuelven datos o que devuelven un único valor primitivo o de tipo Array, en lugar de un conjunto de datos completo. Este método acepta los siguientes parámetros:
Ejemplos del comando
Sentencias DDL
Consultas sencillas que devuelven valores individuales
Comandos con parámetros
Comandos con ajustes
Método query del cliente
Client.query es la forma principal de recuperar un único conjunto de datos “por lote” del servidor de ClickHouse. Utiliza el formato nativo de ClickHouse sobre HTTP para transmitir grandes conjuntos de datos (hasta aproximadamente un millón de filas) de forma eficiente. Este método acepta los siguientes parámetros:
Ejemplos de consultas
Consulta básica
Acceder a los resultados de la consulta
Consulta con parámetros en el cliente
Consulta con parámetros del servidor
Consulta con ajustes
El objeto QueryResult
query devuelve un objeto QueryResult con las siguientes propiedades públicas:
result_rows— Una matriz de los datos devueltos en forma de una secuencia de filas, donde cada elemento de fila es una secuencia de valores de columna.result_columns— Una matriz de los datos devueltos en forma de una secuencia de columnas, donde cada elemento de columna es una secuencia de los valores de fila de esa columnacolumn_names— Una tupla de cadenas que representa los nombres de las columnas en elresult_setcolumn_types— Una tupla de instancias de ClickHouseType que representa el tipo de dato de ClickHouse de cada columna enresult_columnsquery_id— El query_id de ClickHouse (útil para examinar la consulta en la tablasystem.query_log)summary— Cualquier dato devuelto por el encabezado de respuesta HTTPX-ClickHouse-Summaryfirst_item— Una propiedad práctica para recuperar la primera fila de la respuesta como un diccionario (las claves son nombres de columna)first_row— Una propiedad práctica para devolver la primera fila del resultadocolumn_block_stream— Un generador de resultados de consultas en formato orientado a columnas. No se debe hacer referencia a esta propiedad directamente (véase más abajo).row_block_stream— Un generador de resultados de consultas en formato orientado a filas. No se debe hacer referencia a esta propiedad directamente (véase más abajo).rows_stream— Un generador de resultados de consultas que produce una sola fila por invocación. No se debe hacer referencia a esta propiedad directamente (véase más abajo).summary— Como se describe en el métodocommand, un diccionario de información resumida devuelta por ClickHouse
*_stream devuelven un Context de Python que puede usarse como iterador para los datos devueltos. Solo se debe acceder a ellas indirectamente mediante los métodos *_stream del cliente.
Los detalles completos del streaming de resultados de consultas (mediante objetos StreamContext) se describen en Consultas avanzadas (consultas en streaming).
Consumo de resultados de consultas con NumPy, Pandas o Arrow
Métodos del cliente para consultas en streaming
Método insert del cliente
Client.insert. Acepta los siguientes parámetros:
Este método devuelve un diccionario de “resumen de la consulta”, tal como se describe en el método “command”. Se generará una excepción si la inserción falla por cualquier motivo.
Para métodos de inserción especializados que funcionan con Pandas DataFrames, tablas PyArrow y DataFrames respaldados por Arrow, consulte Inserciones avanzadas (Métodos de inserción especializados).
Una matriz de NumPy es una Sequence of Sequences válida y puede usarse como argumento
data para el método principal insert, por lo que no se requiere un método especializado.Ejemplos
users con el esquema (id UInt32, name String, age UInt8).
Inserción básica por filas
Inserción orientada a columnas
Inserción con tipos explícitos de columnas
Insertar en una base de datos específica
Inserciones desde archivos
API en bruto
Clases y funciones de utilidad
clickhouse-connect y, al igual que las clases y los métodos documentados anteriormente, son estables entre versiones menores. Los cambios incompatibles en estas clases y funciones solo se producirán en una versión menor (no en una de parche) y permanecerán disponibles como obsoletas durante al menos una versión menor.
Excepciones
clickhouse_connect.driver.exceptions. Las excepciones que detecte el driver utilizarán uno de estos tipos.
Utilidades de ClickHouse SQL
clickhouse_connect.driver.binding pueden usarse para construir y escapar correctamente consultas en ClickHouse SQL. Del mismo modo, las funciones del módulo clickhouse_connect.driver.parser pueden usarse para analizar nombres de tipos de datos de ClickHouse.