Inicio rápido
Datos de conexión
| Parámetros | Descripción |
|---|---|
HOST and PORT | Normalmente, el puerto es 9440 cuando se usa TLS, o 9000 cuando no se usa TLS. |
DATABASE NAME | De forma predeterminada, existe una base de datos llamada default; use el nombre de la base de datos a la que quiere conectarse. |
USERNAME and PASSWORD | De forma predeterminada, el nombre de usuario es default. Use el nombre de usuario adecuado para su caso de uso. |
clickhouse-client.
Si usa ClickHouse autogestionado, los detalles de la conexión los establece su administrador de ClickHouse.
Inicializar un módulo
Copia un ejemplo de código
clickhouse-golang-example como main.go.
main.go
Ejecutar go mod tidy
Configura tus datos de conexión
main.go, en la función connect():
Ejecutar el ejemplo
Más información
Descripción general
- clickhouse-go - Cliente de alto nivel que admite tanto la interfaz estándar
database/sqlde Go como la API nativa de ClickHouse. - ch-go - Cliente de bajo nivel. Solo interfaz nativa.
Cuatro formas de conectarse
| TCP (protocolo nativo, puerto 9000/9440) | HTTP (puerto 8123/8443) | |
|---|---|---|
ClickHouse API (clickhouse.Open) | Predeterminado — mejor rendimiento | Configura Protocol: clickhouse.HTTP |
API de database/sql (OpenDB / sql.Open) | clickhouse://host:9000 | http://host:8123 |
database/sql cuando necesites integrarte con ORMs o herramientas que esperan una interfaz estándar de base de datos de Go.
Elegir un transporte: TCP es más rápido y es la opción predeterminada. Cambia a HTTP cuando tu infraestructura lo requiera; por ejemplo, al conectarte a través de un balanceador de carga HTTP o un proxy, o cuando necesites funciones específicas de HTTP, como sesiones con tablas temporales o algoritmos de compresión adicionales (gzip, deflate, br).
Ambas APIs usan codificación binaria nativa independientemente del transporte, por lo que HTTP no añade sobrecarga de serialización.
| formato nativo | Transporte TCP | Transporte HTTP | Escritura masiva | Serialización de structs | Compresión | Callbacks de progreso | |
|---|---|---|---|---|---|---|---|
| ClickHouse API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
API de database/sql | ✅ | ✅ | ✅ | ✅ | ✅ |
Elegir un cliente
interface{} (any), lo que simplifica su uso.
Para cargas de trabajo de consultas centradas en agregaciones o cargas de trabajo de inserción con menor throughput, clickhouse-go proporciona una interfaz database/sql conocida y una semántica de filas más sencilla. También puede usar HTTP opcionalmente como protocolo de transporte y aprovechar funciones auxiliares para serializar y deserializar filas hacia y desde structs.
| Formato nativo | Protocolo nativo | Protocolo HTTP | API orientada a filas | API orientada a columnas | Flexibilidad de tipos | Compresión | Marcadores de posición de consulta | |
|---|---|---|---|---|---|---|---|---|
| clickhouse-go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ch-go | ✅ | ✅ | ✅ | ✅ |
Instalación
require github.com/ClickHouse/clickhouse-go/v2 main
O bien, clona el repositorio:
Versiones
Compatibilidad con ClickHouse
- Todas las versiones de ClickHouse compatibles actualmente, como se indica aquí. A medida que las versiones de ClickHouse dejan de tener soporte, también dejan de probarse activamente con las versiones del cliente.
- Todas las versiones de ClickHouse durante los 2 años posteriores a la fecha de lanzamiento del cliente. Ten en cuenta que solo las versiones LTS se prueban activamente.
Compatibilidad con Go
| Versión del cliente | Versiones de Go |
|---|---|
| => 2.0 <= 2.2 | 1.17, 1.18 |
| >= 2.3, < 2.41 | 1.18+ |
| >= 2.41 | 1.21+ |
| >= 2.43 | 1.24+ |
buenas prácticas
- Utilice la API de ClickHouse siempre que sea posible, especialmente para tipos primitivos. Esto evita una reflexión y una indirección significativas.
- Si lee conjuntos de datos grandes, considere modificar
BlockBufferSize. Esto aumentará el uso de memoria, pero permitirá decodificar más bloques en paralelo durante la iteración de filas. El valor predeterminado de 2 es conservador y minimiza la sobrecarga de memoria. Los valores más altos implicarán más bloques en memoria. Esto requiere pruebas, ya que distintas consultas pueden producir bloques de distintos tamaños. Por lo tanto, también puede establecerse a nivel de consulta mediante el Context. - Sea específico con los tipos al insertar datos. Aunque el cliente busca ser flexible, por ejemplo, permitiendo analizar cadenas como UUID o IP, esto requiere validación de datos y supone un coste en el momento de la inserción.
- Utilice inserciones orientadas a columna siempre que sea posible. De nuevo, estas deben estar fuertemente tipadas para evitar que el cliente tenga que convertir sus valores.
- Siga las recomendaciones de ClickHouse para lograr un rendimiento de inserción óptimo.
Siguientes pasos
- Configuración — ajustes de conexión, TLS, autenticación, registro y compresión
- ClickHouse API — API nativa de Go para consultas e inserciones
- API de base de datos/SQL — interfaz estándar
database/sql - Tipos de datos — correspondencia de tipos de Go y compatibilidad con tipos complejos