database/sql, ou API « standard », vous permet d’utiliser le client dans des scénarios où le code d’application doit rester indépendant des bases de données sous-jacentes en s’appuyant sur une interface standard. Cela a toutefois un coût : des couches supplémentaires d’abstraction et d’indirection, ainsi que des primitives qui ne sont pas nécessairement adaptées à ClickHouse. Ces contraintes restent généralement acceptables dans les cas où des outils doivent se connecter à plusieurs bases de données.
De plus, ce client prend en charge HTTP comme couche de transport ; les données restent encodées au format natif pour des performances optimales.
Connexion
clickhouse://<host>:<port>?<query_option>=<value> avec la méthode Open, soit via la méthode clickhouse.OpenDB. Cette dernière ne fait pas partie de la spécification database/sql, mais renvoie une instance sql.DB. Cette méthode offre des fonctionnalités telles que le profilage, qu’il n’est pas possible d’exposer clairement via la spécification database/sql.
conn a déjà été créée et qu’elle est disponible.
Paramètres de connexion
hosts- liste d’hôtes à adresse unique séparés par des virgules pour l’équilibrage de charge et le basculement - voir Connexion à plusieurs nœuds.username/password- identifiants d’authentification - voir Authentificationdatabase- sélectionne la base de données par défaut activedial_timeout- une chaîne de durée est une séquence éventuellement signée de nombres décimaux, chacun pouvant inclure une fraction et un suffixe d’unité tel que300ms,1s. Les unités de temps valides sontms,s,m.connection_open_strategy-random/in_order(par défaut :random) - voir Connexion à plusieurs nœudsround_robin- sélectionne un serveur en round-robin dans l’ensemblein_order- le premier serveur disponible est sélectionné dans l’ordre spécifié
debug- active la sortie de débogage (valeur booléenne)compress- spécifie l’algorithme de compression -none(par défaut),zstd,lz4,gzip,deflate,br. Si défini surtrue,lz4sera utilisé. Seulslz4etzstdsont pris en charge pour la communication native.compress_level- niveau de compression (la valeur par défaut est0). Voir Compression. Cela dépend de l’algorithme :gzip--2(vitesse maximale) à9(compression maximale)deflate--2(vitesse maximale) à9(compression maximale)br-0(vitesse maximale) à11(compression maximale)zstd,lz4- ignoré
secure- établit une connexion SSL sécurisée (la valeur par défaut estfalse)skip_verify- ignore la vérification du certificat (la valeur par défaut estfalse)block_buffer_size- permet de contrôler la taille du tampon de bloc. VoirBlockBufferSize. (la valeur par défaut est2)
Connexion via HTTP
Sessions
HTTP uniquementLes sessions ne sont nécessaires qu’avec le transport HTTP. Les connexions TCP natives intègrent automatiquement une session.
session_id comme paramètre pour activer les fonctionnalités liées à la session, telles que les tables temporaires.
Exécution
sql à l’aide de la méthode Exec.
Context en paramètre ; par défaut, elle s’exécute avec le Context d’arrière-plan. Vous pouvez utiliser ExecContext si nécessaire ; voir Using Context.
Insertion par lot
sql.Tx via la méthode Being. À partir de celui-ci, il est possible d’obtenir un lot à l’aide de la méthode Prepare avec l’instruction INSERT. Cela renvoie un sql.Stmt auquel des lignes peuvent être ajoutées via la méthode Exec. Le lot est accumulé en mémoire jusqu’à l’exécution de Commit sur le sql.Tx d’origine.
Interroger des lignes
QueryRow. Cette méthode renvoie un *sql.Row, sur lequel Scan peut être appelé avec des pointeurs vers des variables dans lesquelles les valeurs des colonnes seront stockées. Une variante QueryRowContext permet de transmettre un Context autre que background - voir Using Context.
Query. Celle-ci renvoie une structure *sql.Rows, sur laquelle on peut appeler Next pour parcourir les lignes. Son équivalent QueryContext permet de transmettre un contexte.
Insertion asynchrone
ExecContext. Cette méthode doit recevoir un contexte dans lequel le mode asynchrone est activé, comme illustré ci-dessous. Cela permet à l’utilisateur de préciser si le client doit attendre que le serveur termine l’insertion ou s’il doit répondre dès que les données ont été reçues. Cela contrôle en pratique le paramètre wait_for_async_insert.
Liaison de paramètres
Exec, Query et QueryRow (ainsi qu’à leurs variantes Context équivalentes). Les paramètres positionnels, nommés et numérotés sont pris en charge.
Utilisation du contexte
Context des méthodes. Autrement dit, des méthodes comme Exec, qui utilisent par défaut le contexte d’arrière-plan, ont une variante ExecContext à laquelle un contexte peut être passé en premier paramètre. Cela permet de transmettre un contexte à n’importe quelle étape du flux d’une application. Par exemple, vous pouvez passer un contexte lors de l’établissement d’une connexion via ConnContext ou lors de la récupération d’une ligne de requête via QueryRowContext. Des exemples de toutes les méthodes disponibles sont présentés ci-dessous.
Pour plus de détails sur l’utilisation du contexte pour transmettre des deadlines, des signaux d’annulation, des identifiants de requête, des quota keys et des paramètres de connexion, consultez Using Context pour la API ClickHouse.
Analyse dynamique
Tables externes
SELECT. Ces données sont placées dans une table temporaire et peuvent être utilisées dans la requête elle-même lors de son exécution.
Pour envoyer des données externes avec une requête, l’utilisateur doit créer une table externe via ext.NewTable avant de la transmettre dans le contexte.
OpenTelemetry
clickhouse.WithSpan pour associer un span à une requête via le contexte.
Limitation du transport HTTPBien que le serveur ClickHouse accepte les en-têtes HTTP standard
traceparent / tracestate, le transport HTTP de clickhouse-go ne les envoie pas actuellement — WithSpan n’a donc aucun effet avec HTTP. Pour contourner cette limitation, vous pouvez définir l’en-tête manuellement via HttpHeaders dans les options de connexion.Compression
lz4 et zstd au niveau des blocs. En outre, les compressions gzip, deflate et br sont prises en charge pour les connexions HTTP. Si l’une d’elles est activée, la compression est appliquée aux blocs lors de l’insertion et pour les réponses aux requêtes. Les autres requêtes, par ex. les pings ou les requêtes de query, resteront non compressées. Cela est conforme au comportement des options lz4 et zstd.
Si vous utilisez la méthode OpenDB pour établir une connexion, vous pouvez transmettre une configuration de compression. Cela permet notamment de spécifier le niveau de compression (voir ci-dessous). Si vous vous connectez via sql.Open avec un DSN, utilisez le paramètre compress. Celui-ci peut être soit un algorithme de compression spécifique, à savoir gzip, deflate, br, zstd ou lz4, soit un indicateur booléen. S’il est défini sur true, lz4 sera utilisé. La valeur par défaut est none, c.-à-d. la compression est désactivée.
gzip- de-2(vitesse maximale) à9(compression maximale)deflate- de-2(vitesse maximale) à9(compression maximale)br- de0(vitesse maximale) à11(compression maximale)zstd,lz4- ignoré