Saltar para o conteúdo principal

ClickHouse

Base de Dados OLAP Colunar

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

O ClickHouse é um sistema de gestão de bases 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 milhares de milhões de linhas e dezenas de gigabytes de dados por segundo num ú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.

Porquê ClickHouse?

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

  • Performance extrema: consultas analíticas em milhares de milhões de registos em milissegundos
  • Armazenamento colunar: compressão eficiente e leitura otimizada para consultas que acedem a 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 registos 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 bases 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 acedem a poucas colunas de tabelas com milhões ou milhares de milhõ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 numa 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 registos 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 defeito, 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:

  • Monitorização 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 integra-se 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):