ClickHouse
Banco de Dados OLAP Colunar
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ística | Armazenamento em Linhas | Armazenamento Colunar |
|---|---|---|
| Organização | Dados armazenados linha a linha | Dados armazenados coluna a coluna |
| Leitura | Lê todas as colunas da linha | Lê apenas as colunas necessárias |
| Compressão | Moderada (dados heterogêneos) | Alta (dados homogêneos por coluna) |
| Melhor para | OLTP (transações) | OLAP (análises) |
| Exemplo | PostgreSQL, MySQL | ClickHouse, 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:
| Componente | Integração |
|---|---|
| Apache Superset | Fonte de dados para dashboards e visualizações |
| CloudBeaver | Administração e consultas SQL via interface web |
| Apache NiFi | Ingestão de dados de diversas fontes para o ClickHouse |
| Trino | Consultas federadas envolvendo dados no ClickHouse |
| Apache Airflow | Orquestração de pipelines de carga e transformação |
Boas Práticas
- Escolha a chave de ordenação com cuidado: a
ORDER BYdo MergeTree determina como os dados são organizados fisicamente; escolha colunas que serão frequentemente filtradas - Use tipos de dados apropriados: prefira
UInt32aInt64quando possível; useLowCardinality(String)para colunas com poucos valores distintos - Configure TTL para retenção: utilize
TTL data + INTERVAL 90 DAYpara 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):