Saltar para o conteúdo principal

ClickHouse

Banco de Dados OLAP Colunar

ClickHouse icon
This component is available only for TDP Kubernetes from v3.0.0.

O ClickHouse é um sistema de gerenciamento de banco de dados colunar (DBMS) open source, de alto desempenho, projetado para processamento analítico online (OLAP). Desenvolvido originalmente pela Yandex para o serviço de análise web Yandex.Metrica, o ClickHouse é capaz de processar bilhões de linhas e dezenas de gigabytes de dados por segundo em um único servidor.

No TDP Kubernetes, o ClickHouse é um componente exclusivo da edição Kubernetes, oferecendo uma solução de análise de dados em tempo real complementar ao Apache Superset e ao Trino.

Por que ClickHouse?

O ClickHouse se destaca em cenários analíticos de alto volume por diversas razões:

  • Performance extrema: consultas analíticas em bilhões de registros em milissegundos
  • Armazenamento colunar: compressão eficiente e leitura otimizada para consultas que acessam poucas colunas
  • Escalabilidade linear: distribuição de dados e consultas em múltiplos nós do cluster
  • SQL compatível: suporta uma sintaxe SQL rica, facilitando a adoção por analistas e engenheiros de dados
  • Ingestão em tempo real: capaz de inserir milhões de registros por segundo
  • Compressão inteligente: algoritmos de compressão adaptados ao tipo de dado de cada coluna

Armazenamento Colunar vs. Armazenamento em Linhas

A principal diferença entre o ClickHouse e bancos de dados tradicionais (como PostgreSQL ou MySQL) está no modelo de armazenamento:

CaracterísticaArmazenamento em LinhasArmazenamento Colunar
OrganizaçãoDados armazenados linha a linhaDados armazenados coluna a coluna
LeituraLê todas as colunas da linhaLê apenas as colunas necessárias
CompressãoModerada (dados heterogêneos)Alta (dados homogêneos por coluna)
Melhor paraOLTP (transações)OLAP (análises)
ExemploPostgreSQL, MySQLClickHouse, Apache Druid

Em cenários analíticos típicos, onde as consultas acessam poucas colunas de tabelas com milhões ou bilhões de linhas, o armazenamento colunar é significativamente mais eficiente.

Arquitetura do ClickHouse

MergeTree Engine

O MergeTree é o engine de armazenamento principal do ClickHouse. Ele organiza os dados em parts que são periodicamente mescladas (merged) em segundo plano, otimizando a compressão e a performance de leitura.

Variantes do MergeTree incluem:

  • ReplacingMergeTree: remove linhas duplicadas com base em uma chave de ordenação
  • SummingMergeTree: agrega automaticamente valores numéricos ao mesclar
  • AggregatingMergeTree: mantém estados de agregação pré-computados
  • CollapsingMergeTree: suporta remoção lógica de registros por colapso

Replicação e Sharding

O ClickHouse suporta replicação e sharding nativos para alta disponibilidade e escalabilidade:

  • Replicação: utiliza o ZooKeeper (ou ClickHouse Keeper) para coordenar réplicas, garantindo consistência eventual dos dados
  • Sharding: distribui os dados entre múltiplos nós utilizando chaves de distribuição configuráveis

No TDP Kubernetes, o ClickHouse é implantado com replicação habilitada por padrão, garantindo alta disponibilidade dos dados analíticos.

Casos de Uso no TDP

Análise de Logs e Métricas

O ClickHouse é ideal para armazenar e consultar grandes volumes de logs e métricas operacionais, oferecendo:

  • Ingestão em tempo real de eventos
  • Retenção configurável por TTL (Time-To-Live)
  • Consultas ad-hoc com latência de milissegundos

Dashboards em Tempo Real

Integrado ao Apache Superset, o ClickHouse fornece a camada de dados para dashboards interativos com atualização em tempo real, especialmente útil para:

  • Monitoramento de pipelines de dados
  • KPIs de negócios em tempo real
  • Análise de séries temporais

Data Warehousing

O ClickHouse pode ser utilizado como data warehouse para consultas analíticas complexas, complementando o Trino para cenários onde a latência de resposta é crítica.

SQL no ClickHouse

O ClickHouse suporta uma sintaxe SQL rica e familiar, incluindo:

-- Criar tabela com engine MergeTree
CREATE TABLE eventos (
data DateTime,
usuario_id UInt64,
evento String,
valor Float64
) ENGINE = MergeTree()
ORDER BY (data, usuario_id);

-- Inserir dados
INSERT INTO eventos VALUES
('2024-01-01 10:00:00', 1001, 'login', 0),
('2024-01-01 10:05:00', 1001, 'compra', 150.00);

-- Consulta analítica com agregação
SELECT
toDate(data) AS dia,
count() AS total_eventos,
countIf(evento = 'compra') AS total_compras,
sum(valor) AS valor_total
FROM eventos
WHERE data >= '2024-01-01'
GROUP BY dia
ORDER BY dia;

Funções Especializadas

O ClickHouse oferece uma ampla biblioteca de funções otimizadas:

  • Funções de data/hora: toStartOfHour(), toMonday(), dateDiff()
  • Funções de agregação: quantile(), uniq(), groupArray()
  • Funções de arrays: arrayJoin(), arrayMap(), arrayFilter()
  • Funções aproximadas: uniqHLL12(), quantileTDigest() para estimativas rápidas

Integração com o Ecossistema TDP

No TDP Kubernetes, o ClickHouse se integra com os seguintes componentes:

ComponenteIntegração
Apache SupersetFonte de dados para dashboards e visualizações
CloudBeaverAdministração e consultas SQL via interface web
Apache NiFiIngestão de dados de diversas fontes para o ClickHouse
TrinoConsultas federadas envolvendo dados no ClickHouse
Apache AirflowOrquestração de pipelines de carga e transformação

Boas Práticas

  • Escolha a chave de ordenação com cuidado: a ORDER BY do MergeTree determina como os dados são organizados fisicamente; escolha colunas que serão frequentemente filtradas
  • Use tipos de dados apropriados: prefira UInt32 a Int64 quando possível; use LowCardinality(String) para colunas com poucos valores distintos
  • Configure TTL para retenção: utilize TTL data + INTERVAL 90 DAY para remover dados antigos automaticamente
  • Evite SELECT *: consulte apenas as colunas necessárias para aproveitar a vantagem do armazenamento colunar
  • Utilize vistas materializadas: para pré-computar agregações frequentes e acelerar dashboards

Detalhes do Projeto ClickHouse

O ClickHouse foi desenvolvido predominantemente em C++, aproveitando a performance nativa da linguagem para operações de baixo nível e processamento vetorizado de dados colunares.

Recursos do ClickHouse

Fonte(s):