Pular para o conteúdo principal
clickhouse-cpp é a biblioteca cliente C++ oficial do ClickHouse, oferecendo uma interface rápida e com segurança de tipos para o ClickHouse por meio de seu protocolo binário nativo. As instruções de compilação, os exemplos de uso e a documentação adicional estão disponíveis no repositório GitHub do projeto: https://github.com/ClickHouse/clickhouse-cpp.
A biblioteca está em desenvolvimento ativo. Embora já ofereça suporte às principais funcionalidades do ClickHouse, alguns recursos e tipos de dados talvez ainda não estejam totalmente implementados ou não tenham suporte completo.Seu feedback é muito valioso e ajuda a orientar a priorização de novos recursos e melhorias. Se você encontrar limitações, funcionalidades ausentes ou comportamento inesperado, por favor compartilhe suas observações ou solicitações de novos recursos pelo rastreador de issues em  https://github.com/ClickHouse/clickhouse-cpp/issues

Incluindo a biblioteca ao seu projeto

A forma mais simples de incorporar a biblioteca ao seu projeto é usando o módulo FetchContent do CMake. Essa abordagem permite fixar uma versão exata da biblioteca e compilá-la como parte do fluxo de trabalho normal do CMake.
A opção WITH_OPENSSL habilita o suporte a TLS na biblioteca e é necessária ao se conectar ao ClickHouse Cloud ou a outras implantações do ClickHouse com SSL habilitado. Embora possa ser omitida em conexões sem TLS, geralmente é recomendável habilitá-la. A compilação com suporte a SSL exige que os pacotes de desenvolvimento do OpenSSL estejam instalados. Instale libssl-dev no Debian, Ubuntu ou seus derivados; openssl-devel no Fedora e Red Hat; ou openssl no macOS, usando o Homebrew. Depois que a dependência estiver disponível, vincule seu target ao target de biblioteca exportado:

Exemplos

Definindo o objeto cliente

Crie uma instância de Client para estabelecer uma conexão com o ClickHouse. O exemplo a seguir mostra como se conectar a uma instância local do ClickHouse, na qual não é necessário usar senha e o SSL não está habilitado.
Em configurações mais avançadas, é necessária uma configuração adicional. O exemplo a seguir demonstra como se conectar a uma instância do ClickHouse Cloud usando vários parâmetros adicionais:

Criando tabelas e executando consultas sem retorno de dados

Para executar uma consulta que não retorna dados, como na criação de tabelas, use o método Execute. A mesma abordagem se aplica a outras instruções, como ALTER TABLE, DROP etc.

Inserindo dados

Para inserir dados em uma tabela, construa um Block e preencha-o com objetos de coluna que correspondam ao esquema da tabela. Os dados são adicionados coluna por coluna e, em seguida, inseridos em uma única operação usando o método Insert, que é otimizado para gravações em lote eficientes.

Selecionando os dados

Para executar uma consulta que retorna dados, use o método Select e forneça um callback para processar o resultado. Os resultados da consulta são retornados como objetos Block, refletindo a representação de dados nativa e orientada a colunas do ClickHouse.

Tipos de dados suportados

  • UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
  • UInt128, Int128
  • Decimal32, Decimal64, Decimal128
  • Float32, Float64
  • Date
  • DateTime, DateTime64
  • DateTime([timezone]), DateTime64(N, [timezone])
  • UUID
  • Enum8, Enum16
  • String
  • FixedString(N)
  • LowCardinality(String) e LowCardinality(FixedString(N))
  • Nullable(T)
  • Array(T)
  • Tuple
  • Map
  • IPv4, IPv6
  • Point, Ring, Polygon, MultiPolygon
Última modificação em 10 de junho de 2026