Pular para o conteúdo
Skillpedia
Bancos de dados48 mil · #2498

cc-skill-clickhouse-io

Faz seu agente otimizar o uso do banco de dados ClickHouse. Ele entende padrões de consulta e engenharia de dados. É útil para cargas de trabalho analíticas de alta performance.

O que ela faz

Este agente ajuda você a usar o ClickHouse, um banco de dados rápido para analisar grandes quantidades de dados. Ele mostra como organizar seus dados, escrever consultas eficientes e inserir informações rapidamente.

Quando usar

  • ✓Quando você precisa organizar dados em um banco de dados chamado ClickHouse.
  • ✓Quando você quer escrever consultas (pedidos de informação) mais rápidas para o ClickHouse.
  • ✓Quando você precisa inserir muitos dados no ClickHouse de forma eficiente.

Exemplo do que pedir para a IA

“Como eu crio uma tabela no ClickHouse para guardar dados de vendas diárias?”

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/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/cc-skill-clickhouse-io/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/cc-skill-clickhouse-io/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa exemplos de código e explicações para mostrar os melhores jeitos de estruturar tabelas, otimizar consultas e inserir dados. O objetivo é fazer suas análises serem mais rápidas e eficientes.

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 sickn33/agentic-awesome-skills --skill cc-skill-clickhouse-io

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/cc-skill-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.

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 Características:

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

Padrões de Design de Tabela

MergeTree Engine (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 (Desduplicaçã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

-- ✅ 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;

-- ❌ 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

-- ✅ 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;

-- ✅ 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 { ClickHouse } from 'clickhouse'

const clickhouse = new ClickHouse({
  url: process.env.CLICKHOUSE_URL,
  port: 8123,
  basicAuth: {
    username: process.env.CLICKHOUSE_USER,
    password: process.env.CLICKHOUSE_PASSWORD
  }
})

// ✅ Batch insert (efficient)
async function bulkInsertTrades(trades: Trade[]) {
  const values = trades.map(trade => `(
    '${trade.id}',
    '${trade.market_id}',
    '${trade.user_id}',
    ${trade.amount},
    '${trade.timestamp.toISOString()}'
  )`).join(',')

  await clickhouse.query(`
    INSERT INTO trades (id, market_id, user_id, amount, timestamp)
    VALUES ${values}
  `).toPromise()
}

// ❌ Individual inserts (slow)
async function insertTrade(trade: Trade) {
  // Don't do this in a loop!
  await clickhouse.query(`
    INSERT INTO trades VALUES ('${trade.id}', ...)
  `).toPromise()
}

Inserção por Streaming

// Para ingestão contínua de dados
import { createWriteStream } from 'fs'
import { pipeline } from 'stream/promises'

async function streamInserts() {

…
Perguntas frequentes

O que é ClickHouse?

ClickHouse é um banco de dados feito para analisar muitos dados rapidamente, ideal para relatórios e análises em tempo real.

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

São as melhores práticas e exemplos de como usar o ClickHouse para obter o máximo de performance e eficiência.

Por que a forma de inserir dados é importante?

Inserir dados de forma errada pode deixar o banco lento. Usar métodos como 'bulk insert' ou 'streaming insert' é muito mais rápido para grandes volumes.

Detalhes

Descrição original do autor

ClickHouse database patterns, query optimization, analytics, and data engineering best practices for high-performance analytical workloads.

repo: sickn33/agentic-awesome-skills

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas