Il est recommandé d’utiliser des arguments nommés pour la plupart des méthodes de l’API, compte tenu du nombre d’arguments possibles, dont la plupart sont facultatifs.Les méthodes qui ne sont pas documentées ici ne sont pas considérées comme faisant partie de l’API et peuvent être supprimées ou modifiées.
Initialisation du client
clickhouse_connect.driver.client constitue l’interface principale entre une application Python et le serveur de base de données ClickHouse. Utilisez la fonction clickhouse_connect.get_client pour obtenir une instance de Client, qui accepte les arguments suivants :
Arguments de connexion
Arguments HTTPS/TLS
Argument settings
settings de get_client permet de transmettre au serveur des settings ClickHouse supplémentaires pour chaque requête client. Notez que, dans la plupart des cas, les utilisateurs disposant d’un accès readonly=1 ne peuvent pas modifier les settings envoyés avec une requête ; ClickHouse Connect supprimera donc ces settings de la requête finale et consignera un avertissement. Les settings suivants s’appliquent uniquement aux requêtes/sessions HTTP utilisées par ClickHouse Connect et ne sont pas documentés comme des settings généraux de ClickHouse.
Pour les autres settings ClickHouse pouvant être envoyés avec chaque requête, consultez la documentation ClickHouse.
Exemples de création de client
- Sans paramètre, un client ClickHouse Connect se connecte au port HTTP par défaut sur
localhost, avec l’utilisateur par défaut et sans mot de passe :
- Connexion à un serveur ClickHouse externe sécurisé (HTTPS)
- Connexion avec un ID de session, d’autres paramètres de connexion personnalisés et des settings de ClickHouse.
Cycle de vie du client et bonnes pratiques
Principes fondamentaux
- Réutilisez les clients : créez les clients une seule fois au démarrage de l’application et réutilisez-les pendant toute sa durée de vie
- Évitez les créations fréquentes : ne créez pas de nouveau client pour chaque requête (cela gaspille des centaines de millisecondes par opération)
- Nettoyez correctement : fermez toujours les clients lors de l’arrêt afin de libérer les ressources du pool de connexions
- Partagez quand c’est possible : un seul client peut gérer de nombreuses requêtes concurrentes grâce à son pool de connexions (voir les remarques sur les threads ci-dessous)
Quelques principes de base
Applications multithreadées
Nettoyage approprié
client.close() libère le client et ferme les connexions HTTP du pool uniquement lorsque le client possède son propre gestionnaire de pool (par exemple, s’il a été créé avec des options TLS/proxy personnalisées). Pour le pool partagé par défaut, utilisez client.close_connections() pour fermer explicitement les sockets ; sinon, les connexions sont récupérées automatiquement à l’expiration de l’inactivité et à la fin du processus.
Quand utiliser plusieurs clients
- Serveurs différents : un client par serveur ClickHouse ou cluster
- Identifiants différents : des clients distincts pour différents utilisateurs ou niveaux d’accès
- Bases de données différentes : lorsque vous devez travailler avec plusieurs bases de données
- Sessions isolées : lorsque vous avez besoin de sessions distinctes pour des tables temporaires ou des paramètres propres à la session
- Isolation par thread : lorsque les threads ont besoin de sessions indépendantes (comme indiqué ci-dessus)
Arguments courants des méthodes
parameters et settings. Ces arguments nommés sont décrits ci-dessous.
Argument parameters
query* et command du ClickHouse Connect Client acceptent un argument nommé facultatif, parameters, utilisé pour associer des expressions Python à une expression de valeur ClickHouse. Deux types de liaison sont possibles.
Liaison côté serveur
{<name>:<datatype>}. Pour la liaison côté serveur, l’argument parameters doit être un dictionnaire Python.
- Liaison côté serveur avec dictionnaire Python, valeur DateTime et valeur de chaîne de caractères
Liaison côté client
parameters doit être un dictionnaire ou une séquence. La liaison côté client utilise le formatage de chaînes Python de style “printf” pour la substitution des paramètres.
Notez que, contrairement à la liaison côté serveur, la liaison côté client ne fonctionne pas pour les identifiants de base de données tels que les noms de base de données, de table ou de colonne, car le formatage de style Python ne permet pas de distinguer les différents types de chaînes, qui doivent être mis en forme différemment (backticks ou guillemets doubles pour les identifiants de base de données, guillemets simples pour les valeurs de données).
- Exemple avec un dictionnaire Python, une valeur DateTime et l’échappement des chaînes
- Exemple avec une séquence Python (Tuple), Float64 et IPv4Address
Pour lier des arguments DateTime64 (types ClickHouse avec une précision à la sous-seconde), il faut recourir à l’une des deux approches personnalisées suivantes :
- Enveloppez la valeur Python
datetime.datetimedans la nouvelle classe DT64Param, par ex.- Si vous utilisez un dictionnaire de valeurs de paramètres, ajoutez la chaîne
_64au nom du paramètre
- Si vous utilisez un dictionnaire de valeurs de paramètres, ajoutez la chaîne
Argument settings
settings facultatif pour transmettre les settings utilisateur du serveur ClickHouse pour l’instruction SQL concernée. L’argument settings doit être un dictionnaire. Chaque élément doit contenir un nom de setting ClickHouse et la valeur associée. Notez que les valeurs seront converties en chaînes de caractères lorsqu’elles seront envoyées au serveur comme paramètres de requête.
Comme pour les settings au niveau du client, ClickHouse Connect ignorera tous les settings que le serveur marque comme readonly=1, avec un message de log associé. Les settings qui s’appliquent uniquement aux requêtes via l’interface HTTP de ClickHouse sont toujours valides. Ces settings sont décrits dans l’API get_client.
Exemple d’utilisation des settings ClickHouse :
Méthode command du Client
Client.command pour envoyer au serveur ClickHouse des requêtes SQL qui ne renvoient généralement pas de données, ou qui renvoient une seule valeur primitive ou un Array plutôt qu’un jeu de données complet. Cette méthode accepte les paramètres suivants :
Exemples de commandes
Instructions DDL
Requêtes simples renvoyant une seule valeur
Commandes avec paramètres
Commandes avec settings
Méthode query du Client
Client.query est le principal moyen de récupérer un seul jeu de données « batch » depuis le serveur ClickHouse. Elle utilise le format natif ClickHouse sur HTTP pour transmettre efficacement de grands jeux de données (jusqu’à environ un million de lignes). Cette méthode accepte les paramètres suivants :
Exemples de requêtes
Requête de base
Accéder au résultat de la requête
Requête avec paramètres côté client
Requête avec paramètres côté serveur
Requête avec setting
L’objet QueryResult
query de base renvoie un objet QueryResult avec les propriétés publiques suivantes :
result_rows— Une matrice des données renvoyées sous la forme d’une séquence de lignes, chaque ligne étant elle-même une séquence de valeurs de colonnes.result_columns— Une matrice des données renvoyées sous la forme d’une séquence de colonnes, chaque colonne étant elle-même une séquence des valeurs de ligne de cette colonnecolumn_names— Un tuple de chaînes représentant les noms des colonnes dans leresult_setcolumn_types— Un tuple d’instancesClickHouseTypereprésentant le type de données ClickHouse de chaque colonne dansresult_columnsquery_id— Lequery_idClickHouse (utile pour examiner la requête dans la tablesystem.query_log)summary— Toutes les données renvoyées par l’en-tête de réponse HTTPX-ClickHouse-Summaryfirst_item— Une propriété pratique pour récupérer la première ligne de la réponse sous forme de dictionnaire (les clés sont les noms des colonnes)first_row— Une propriété pratique pour renvoyer la première ligne du résultatcolumn_block_stream— Un générateur de résultats de la requête au format orienté colonnes. Cette propriété ne doit pas être utilisée directement (voir ci-dessous).row_block_stream— Un générateur de résultats de la requête au format orienté lignes. Cette propriété ne doit pas être utilisée directement (voir ci-dessous).rows_stream— Un générateur de résultats de la requête qui renvoie une seule ligne à chaque appel. Cette propriété ne doit pas être utilisée directement (voir ci-dessous).summary— Comme décrit dans la méthodecommand, un dictionnaire d’informations récapitulatives renvoyé par ClickHouse
*_stream renvoient un Context Python pouvant être utilisé comme itérateur pour les données renvoyées. Elles ne doivent être utilisées qu’indirectement via les méthodes *_stream du Client.
Tous les détails sur le streaming des résultats de requête (à l’aide d’objets StreamContext) sont présentés dans Advanced Queries (Streaming Queries).
Consommer les résultats des requêtes avec NumPy, Pandas ou Arrow
Méthodes du Client pour les requêtes en streaming
Méthode insert du Client
Client.insert. Elle accepte les paramètres suivants :
Cette méthode renvoie un dictionnaire de « résumé de requête », comme décrit pour la méthode « command ». Une exception sera levée si l’insertion échoue, quelle qu’en soit la raison.
Pour les méthodes d’insertion spécialisées qui fonctionnent avec les Pandas DataFrames, les tables PyArrow et les DataFrames basés sur Arrow, voir Insertion avancée (méthodes d’insertion spécialisées).
Un tableau NumPy est une Sequence of Sequences valide et peut être utilisé comme argument
data de la méthode principale insert ; une méthode spécialisée n’est donc pas nécessaire.Exemples
users existe déjà, avec le schéma (id UInt32, name String, age UInt8).
Insertion simple par ligne
Insertion par colonnes
Insertion avec des types de colonnes explicitement spécifiés
Insérer dans une base de données spécifique
Insertions depuis des fichiers
API brute
Classes et fonctions utilitaires
clickhouse-connect « publique » et sont, comme les classes et les méthodes documentées ci-dessus, stables d’une version mineure à l’autre. Des changements incompatibles dans ces classes et fonctions ne seront introduits que dans une version mineure (et non dans un patch) et resteront disponibles avec le statut « Deprecated » pendant au moins une version mineure.
Exceptions
clickhouse_connect.driver.exceptions. Les exceptions effectivement détectées par le driver utiliseront l’un de ces types.
Utilitaires SQL ClickHouse
clickhouse_connect.driver.binding peuvent être utilisées pour construire correctement les requêtes ClickHouse SQL et en échapper correctement le contenu. De même, les fonctions du module clickhouse_connect.driver.parser peuvent être utilisées pour analyser les noms de types de données ClickHouse.