Pular para o conteúdo principal
clickhouse-cpp é a biblioteca cliente oficial em C++ para ClickHouse, fornecendo uma interface rápida e com segurança de tipos para o ClickHouse usando seu protocolo binário nativo. Instruções de compilação, exemplos de uso e 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 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, compartilhe suas observações ou pedidos de recursos no 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 é usar 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 para se conectar ao ClickHouse Cloud ou a outras implantações do ClickHouse com SSL habilitado. Embora possa ser omitida em conexões sem TLS, em geral é recomendável mantê-la habilitada. Compilar 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, Red Hat; ou openssl no macOS, usando o Homebrew. Depois que a dependência estiver disponível, vincule seu target ao alvo de biblioteca exportado:

Exemplos

Configurando 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 nenhuma senha é necessária e o SSL não está ativado.
Em configurações mais avançadas, são necessárias configurações adicionais. 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 retornar 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 uma callback para processar o resultado. Os resultados da consulta são entregues como objetos Block, refletindo a representação nativa de dados orientada por 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