Démarrage rapide
Détails de connexion
| Paramètres | Description |
|---|---|
HOST and PORT | En général, le port est 9440 lorsque vous utilisez TLS, ou 9000 lorsque vous ne l’utilisez pas. |
DATABASE NAME | Par défaut, une base de données nommée default existe ; utilisez le nom de la base de données à laquelle vous souhaitez vous connecter. |
USERNAME and PASSWORD | Par défaut, le nom d’utilisateur est default. Utilisez le nom d’utilisateur adapté à votre cas d’usage. |
clickhouse-client.
Si vous utilisez une instance ClickHouse autogérée, les détails de connexion sont définis par votre administrateur ClickHouse.
Initialiser un module
Copiez un exemple de code
clickhouse-golang-example sous le nom main.go.
main.go
Lancez go mod tidy
Configurez vos détails de connexion
main.go, dans la fonction connect() :
Exécuter l’exemple
En savoir plus
Vue d’ensemble
- 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
| TCP (protocole natif, port 9000/9440) | HTTP (port 8123/8443) | |
|---|---|---|
ClickHouse API (clickhouse.Open) | Par défaut — meilleures performances | Définissez Protocol: clickhouse.HTTP |
database/sql API (OpenDB / sql.Open) | clickhouse://host:9000 | http://host:8123 |
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.
| Native format | Transport TCP | Transport HTTP | Écriture par lots | Sérialisation de struct | Compression | Callbacks de progression | |
|---|---|---|---|---|---|---|---|
| ClickHouse API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
database/sql API | ✅ | ✅ | ✅ | ✅ | ✅ |
Choisir un client
interface{} (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.
| Format natif | Protocole natif | Protocole HTTP | API orientée lignes | API orientée colonnes | Souplesse des types | Compression | Placeholders de requête | |
|---|---|---|---|---|---|---|---|---|
| clickhouse-go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ch-go | ✅ | ✅ | ✅ | ✅ |
Installation
require github.com/ClickHouse/clickhouse-go/v2 main
Ou clonez le dépôt :
Versions
Compatibilité avec ClickHouse
- 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
| Version du client | Versions de Golang |
|---|---|
| => 2.0 <= 2.2 | 1.17, 1.18 |
| >= 2.3, < 2.41 | 1.18+ |
| >= 2.41 | 1.21+ |
| >= 2.43 | 1.24+ |
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