Démarrage rapide
Commençons par un exemple simple. Il se connectera à ClickHouse et exécutera une requête SELECT sur la base de données système. Pour commencer, vous aurez besoin de vos détails de connexion.Détails de connexion
Pour vous connecter à ClickHouse via TCP natif, vous avez besoin des informations suivantes :
Les détails de votre service ClickHouse Cloud sont disponibles dans la console ClickHouse Cloud.
Sélectionnez le service auquel vous allez vous connecter, puis cliquez sur Connect :

clickhouse-client.

Initialiser un module
Copiez un exemple de code
Copiez ce code dans le répertoireclickhouse-golang-example sous le nom main.go.
main.go
Lancez go mod tidy
Configurez vos détails de connexion
Vous avez relevé précédemment vos détails de connexion. Définissez-les dansmain.go, dans la fonction connect() :
Exécuter l’exemple
En savoir plus
Le reste de la documentation de cette catégorie présente en détail le client Go de ClickHouse.Vue d’ensemble
ClickHouse prend en charge deux clients Go officiels. Ces clients sont complémentaires et prennent délibérément en charge des cas d’usage différents.- clickhouse-go - Client Go de haut niveau qui prend en charge soit l’interface
database/sqlstandard de Go, soit l’API native de ClickHouse. - ch-go - Client de bas niveau. Interface native uniquement.
Quatre façons de se connecter
clickhouse-go vous offre deux choix indépendants : quelle API utiliser et quel transport utiliser. Ces deux choix se combinent en quatre modes de connexion :
Choisir une API : choisissez la ClickHouse API pour des performances maximales et l’ensemble complet des fonctionnalités (callbacks de progression, insertions en colonnes, prise en charge étendue des types). Choisissez
database/sql lorsque vous devez l’intégrer à des ORM ou à des outils qui attendent une interface Go standard de base de données.
Choisir un transport : TCP est plus rapide et c’est le mode par défaut. Passez à HTTP lorsque votre infrastructure l’exige — par exemple, si vous vous connectez via un proxy HTTP ou un load balancer HTTP, ou si vous avez besoin de fonctionnalités propres à HTTP comme les sessions avec des tables temporaires, ou d’algorithmes de Compression supplémentaires (gzip, deflate, br).
Les deux API utilisent l’encodage binaire natif quel que soit le transport, donc HTTP n’ajoute aucun surcoût de sérialisation.
Choisir un client
Le choix d’une bibliothèque client dépend de vos usages et de votre besoin de performances optimales. Pour les cas d’usage nécessitant un grand nombre d’insertions, où des millions d’insertions par seconde sont requises, nous recommandons d’utiliser le client bas niveau ch-go. Ce client évite le surcoût lié à la conversion des données d’un format orienté lignes vers des colonnes, comme l’exige le format natif de ClickHouse. En outre, il évite tout recours à la réflexion ou au typeinterface{} (any), ce qui simplifie son utilisation.
Pour les workloads de requête axés sur les agrégations, ou pour des workloads d’insertion à plus faible débit, clickhouse-go fournit une interface database/sql familière et une sémantique orientée lignes plus simple. Vous pouvez également utiliser HTTP comme protocole de transport, si nécessaire, et tirer parti de fonctions utilitaires pour sérialiser et désérialiser des lignes vers et depuis des structs.
Installation
La v1 du pilote est obsolète et ne recevra plus de mises à jour de fonctionnalités ni de prise en charge des nouveaux types ClickHouse. Nous vous recommandons de migrer vers la v2, qui offre de meilleures performances. Pour installer la version 2.x du client, ajoutez le paquet à votre fichier go.mod :require github.com/ClickHouse/clickhouse-go/v2 main
Ou clonez le dépôt :
Versions
Le client est publié indépendamment de ClickHouse. La branche 2.x correspond à la version majeure actuellement en cours de développement. Toutes les versions 2.x devraient être compatibles entre elles.Compatibilité avec ClickHouse
Le client prend en charge :- Toutes les versions de ClickHouse actuellement prises en charge, comme indiqué ici. Lorsqu’une version de ClickHouse n’est plus prise en charge, elle n’est plus non plus testée activement avec les versions du client.
- Toutes les versions de ClickHouse pendant les 2 ans suivant la date de sortie du client. Notez que seules les versions LTS sont testées activement.
Compatibilité de Golang
Bonnes pratiques
- Utilisez l’ClickHouse API lorsque c’est possible, en particulier pour les types primitifs. Cela évite une réflexion et une indirection importantes.
- Si vous lisez de grands jeux de données, envisagez de modifier le paramètre
BlockBufferSize. Cela augmentera l’empreinte mémoire, mais permettra de décoder davantage de blocs en parallèle lors de l’itération sur les lignes. La valeur par défaut de 2 est prudente et minimise la surcharge mémoire. Des valeurs plus élevées signifient davantage de blocs en mémoire. Cela nécessite donc des tests, car différentes requêtes peuvent produire des tailles de bloc différentes. Ce paramètre peut donc être défini au niveau de la requête via le Context. - Soyez précis quant à vos types lors de l’insertion de données. Bien que le client cherche à être flexible, par exemple en permettant d’analyser des chaînes en UUID ou en adresses IP, cela nécessite une validation des données et entraîne un coût au moment de l’insertion.
- Utilisez des insertions orientées colonnes lorsque c’est possible. Là encore, elles doivent être fortement typées afin d’éviter que le client n’ait à convertir vos valeurs.
- Suivez les recommandations de ClickHouse pour obtenir des performances d’insertion optimales.
Étapes suivantes
- Configuration — paramètres de connexion, TLS, authentification, journalisation, compression
- ClickHouse API — API Go native pour les requêtes et les insertions
- API database/sql — interface
database/sqlstandard - Types de données — correspondances de types Go et prise en charge des types complexes