Pular para o conteúdo
Skillpedia
Bancos de dados280 mil · #23

clickhouse-io

Ajuda seu agente a otimizar consultas e esquemas no banco de dados ClickHouse. Ele aplica as melhores práticas para cargas de trabalho analíticas de alta performance. Use quando consultas analíticas demoram muito.

O que ela faz

Ajuda a criar e otimizar consultas no banco de dados ClickHouse. Ele oferece exemplos de como organizar seus dados, escrever consultas eficientes e melhorar a velocidade de análise.

Quando usar

  • ✓Ao criar tabelas no ClickHouse.
  • ✓Quando uma consulta está demorando muito para retornar.
  • ✓Ao analisar grandes volumes de dados.

Exemplo do que pedir para a IA

“Como posso otimizar esta consulta ClickHouse para que ela rode mais rápido: SELECT * FROM tabela WHERE coluna_data BETWEEN '2023-01-01' AND '2023-12-31' AND valor > 100?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/clickhouse-io/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/clickhouse-io/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa padrões e exemplos de código específicos do ClickHouse. Você pode ver como estruturar tabelas, escrever consultas que usam os recursos do ClickHouse e aplicar técnicas para acelerar a análise de dados.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill clickhouse-io

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/clickhouse-io/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Análise do ClickHouse

Padrões específicos do ClickHouse para análise de alto desempenho e engenharia de dados.

Quando Ativar

  • Projetando esquemas de tabelas do ClickHouse (seleção do motor MergeTree)
  • Escrevendo consultas analíticas (agregações, funções de janela, junções)
  • Otimizando o desempenho de consultas (poda de partições, projeções, visualizações materializadas)
  • Ingerindo grandes volumes de dados (inserções em lote, integração com Kafka)
  • Migrando de PostgreSQL/MySQL para ClickHouse para análise
  • Implementando dashboards em tempo real ou análises de séries temporais

Visão Geral

ClickHouse é um sistema de gerenciamento de banco de dados (SGBD) orientado a colunas para processamento analítico online (OLAP). Ele é otimizado para consultas analíticas rápidas em grandes conjuntos de dados.

Principais Recursos:

  • Armazenamento orientado a colunas
  • Compressão de dados
  • Execução paralela de consultas
  • Consultas distribuídas
  • Análises em tempo real

Padrões de Design de Tabelas

Motor MergeTree (Mais Comum)

CREATE TABLE markets_analytics (
    date Date,
    market_id String,
    market_name String,
    volume UInt64,
    trades UInt32,
    unique_traders UInt32,
    avg_trade_size Float64,
    created_at DateTime
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (date, market_id)
SETTINGS index_granularity = 8192;

ReplacingMergeTree (Deduplicação)

-- For data that may have duplicates (e.g., from multiple sources)
CREATE TABLE user_events (
    event_id String,
    user_id String,
    event_type String,
    timestamp DateTime,
    properties String
) ENGINE = ReplacingMergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (user_id, event_id, timestamp)
PRIMARY KEY (user_id, event_id);

AggregatingMergeTree (Pré-agregação)

-- For maintaining aggregated metrics
CREATE TABLE market_stats_hourly (
    hour DateTime,
    market_id String,
    total_volume AggregateFunction(sum, UInt64),
    total_trades AggregateFunction(count, UInt32),
    unique_users AggregateFunction(uniq, String)
) ENGINE = AggregatingMergeTree()
PARTITION BY toYYYYMM(hour)
ORDER BY (hour, market_id);

-- Query aggregated data
SELECT
    hour,
    market_id,
    sumMerge(total_volume) AS volume,
    countMerge(total_trades) AS trades,
    uniqMerge(unique_users) AS users
FROM market_stats_hourly
WHERE hour >= toStartOfHour(now() - INTERVAL 24 HOUR)
GROUP BY hour, market_id
ORDER BY hour DESC;

Padrões de Otimização de Consultas

Filtragem Eficiente

-- PASS: GOOD: Use indexed columns first
SELECT *
FROM markets_analytics
WHERE date >= '2025-01-01'
  AND market_id = 'market-123'
  AND volume > 1000
ORDER BY date DESC
LIMIT 100;

-- FAIL: BAD: Filter on non-indexed columns first
SELECT *
FROM markets_analytics
WHERE volume > 1000
  AND market_name LIKE '%election%'
  AND date >= '2025-01-01';

Agregações

-- PASS: GOOD: Use ClickHouse-specific aggregation functions
SELECT
    toStartOfDay(created_at) AS day,
    market_id,
    sum(volume) AS total_volume,
    count() AS total_trades,
    uniq(trader_id) AS unique_traders,
    avg(trade_size) AS avg_size
FROM trades
WHERE created_at >= today() - INTERVAL 7 DAY
GROUP BY day, market_id
ORDER BY day DESC, total_volume DESC;

-- PASS: Use quantile for percentiles (more efficient than percentile)
SELECT
    quantile(0.50)(trade_size) AS median,
    quantile(0.95)(trade_size) AS p95,
    quantile(0.99)(trade_size) AS p99
FROM trades
WHERE created_at >= now() - INTERVAL 1 HOUR;

Funções de Janela

-- Calculate running totals
SELECT
    date,
    market_id,
    volume,
    sum(volume) OVER (
        PARTITION BY market_id
        ORDER BY date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_volume
FROM markets_analytics
WHERE date >= today() - INTERVAL 30 DAY
ORDER BY market_id, date;

Padrões de Inserção de Dados

Inserção em Massa (Recomendado)

import { createClient } from '@clickhouse/client'

const clickhouse = createClient({
  url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',
  username: process.env.CLICKHOUSE_USER,
  password: process.env.CLICKHOUSE_PASSWORD
})

// PASS: Inserção em lote (eficiente)
async function bulkInsertTrades(trades: Trade[]) {
  await clickhouse.insert({
    table: 'trades',
    values: trades.map(trade => ({
      id: trade.id,
      market_id: trade.market_id,
      user_id: trade.user_id,
      amount: trade.amount,
      timestamp: trade.timestamp.toISOString()
    })),
    format: 'JSONEachRow'
  })
}


…
Perguntas frequentes

O que é ClickHouse?

É um banco de dados otimizado para análises rápidas de grandes quantidades de dados.

O que são 'padrões' neste contexto?

São exemplos de como fazer as coisas de forma eficiente e correta no ClickHouse, como organizar dados ou escrever consultas.

Por que 'MergeTree' é importante?

MergeTree é um tipo de tabela no ClickHouse que ajuda a organizar e processar dados de forma muito eficiente para análises.

Detalhes

Descrição original do autor

ClickHouse database patterns, query optimization, analytics, and data engineering best practices for high-performance analytical workloads. Use when writing ClickHouse schemas or queries, or when an analytical query is too slow.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#23
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas