Início rápido
Detalhes da conexão
| Parâmetros | Descrição |
|---|---|
HOST e PORT | Normalmente, a porta é 9440 ao usar TLS, ou 9000 quando não se usa TLS. |
DATABASE NAME | Por padrão, há um banco de dados chamado default; use o nome do banco de dados ao qual você quer se conectar. |
USERNAME e PASSWORD | Por padrão, o nome de usuário é default. Use o nome de usuário apropriado para o seu caso de uso. |
clickhouse-client de exemplo.
Se você estiver usando ClickHouse autogerenciado, os detalhes da conexão serão definidos pelo administrador do ClickHouse.
Inicialize um módulo
Copie um código de exemplo
clickhouse-golang-example com o nome main.go.
main.go
Execute o comando go mod tidy
Defina os detalhes da conexão
main.go, na função connect():
Execute o exemplo
Saiba mais
Visão geral
- clickhouse-go - Cliente de alto nível que oferece suporte tanto à interface padrão
database/sqldo Go quanto à API nativa do ClickHouse. - ch-go - Cliente de baixo nível. Apenas interface nativa.
Quatro maneiras de se conectar
clickhouse-go oferece duas escolhas independentes: qual API usar e qual transporte usar. Elas se combinam em quatro modos de conexão:
| TCP (protocolo nativo, porta 9000/9440) | HTTP (porta 8123/8443) | |
|---|---|---|
ClickHouse API (clickhouse.Open) | Padrão — melhor desempenho | Defina Protocol: clickhouse.HTTP |
database/sql API (OpenDB / sql.Open) | clickhouse://host:9000 | http://host:8123 |
database/sql quando precisar integrar com ORMs ou ferramentas que esperam uma interface padrão de banco de dados do Go.
Escolhendo um transporte: TCP é mais rápido e é o padrão. Mude para HTTP quando sua infraestrutura exigir isso — por exemplo, ao se conectar por meio de um balanceador de carga HTTP ou proxy, ou quando precisar de recursos específicos de HTTP, como sessões com tabelas temporárias, ou algoritmos adicionais de compressão (gzip, deflate, br).
Ambas as APIs usam a codificação binária nativa independentemente do transporte, portanto o HTTP não adiciona sobrecarga de serialização.
| Native format | Transporte TCP | Transporte HTTP | Escrita em massa | Marshaling de structs | Compressão | Callbacks de progresso | |
|---|---|---|---|---|---|---|---|
| ClickHouse API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
database/sql API | ✅ | ✅ | ✅ | ✅ | ✅ |
Escolhendo um cliente
interface{} (any), o que simplifica o uso.
Para cargas de trabalho de consulta focadas em agregações ou cargas de trabalho de inserção com menor vazão, o clickhouse-go oferece uma interface database/sql familiar e uma semântica baseada em linhas mais simples. Você também pode usar HTTP opcionalmente como protocolo de transporte e aproveitar funções auxiliares para converter linhas de e para structs.
| Formato nativo | Protocolo nativo | Protocolo HTTP | API orientada a linhas | API orientada a colunas | Flexibilidade de tipos | Compressão | Placeholders de consulta | |
|---|---|---|---|---|---|---|---|---|
| clickhouse-go | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ch-go | ✅ | ✅ | ✅ | ✅ |
Instalação
require github.com/ClickHouse/clickhouse-go/v2 main
Ou clone o repositório:
Controle de versão
Compatibilidade com ClickHouse
- Todas as versões do ClickHouse com suporte atualmente, conforme listado aqui. Quando uma versão do ClickHouse deixa de ter suporte, ela também deixa de ser testada ativamente nos lançamentos do cliente.
- Todas as versões do ClickHouse lançadas nos 2 anos anteriores à data de lançamento do cliente. Observe que apenas as versões LTS são testadas ativamente.
Compatibilidade do Golang
| Versão do cliente | Versões do Golang |
|---|---|
| => 2.0 <= 2.2 | 1.17, 1.18 |
| >= 2.3, < 2.41 | 1.18+ |
| >= 2.41 | 1.21+ |
| >= 2.43 | 1.24+ |
Boas práticas
- Utilize a API do ClickHouse sempre que possível, especialmente para tipos primitivos. Isso evita reflexão e indireção significativas.
- Se estiver lendo grandes conjuntos de dados, considere modificar o
BlockBufferSize. Isso aumentará o uso de memória, mas permitirá que mais blocos sejam decodificados em paralelo durante a iteração pelas linhas. O valor padrão de 2 é conservador e minimiza a sobrecarga de memória. Valores mais altos significam mais blocos na memória. Isso exige testes, já que consultas diferentes podem produzir blocos de tamanhos diferentes. Portanto, isso pode ser definido no nível da consulta por meio do Context. - Seja específico com os tipos ao inserir dados. Embora o cliente procure ser flexível, por exemplo, permitindo analisar strings como UUIDs ou IPs, isso exige validação de dados e tem um custo no momento da inserção.
- Use inserções orientadas a colunas sempre que possível. Novamente, elas devem ter tipagem forte, evitando que o cliente precise converter seus valores.
- Siga as recomendações do ClickHouse para obter o melhor desempenho de inserção.
Próximos passos
- Configuração — configurações de conexão, TLS, autenticação, logging, compressão
- ClickHouse API — API nativa do Go para consultas e inserções
- API de banco de dados/SQL — interface padrão
database/sql - Tipos de dados — mapeamentos de tipos do Go e suporte a tipos complexos