From clickhouse-best-practices
Reviews ClickHouse schemas, queries, configurations against 31 rules for schema design, query optimization, data ingestion, and agent connectivity. Cite rules in recommendations.
npx claudepluginhub clickhouse/agent-skills --plugin clickhouse-best-practicesThis skill uses the workspace's default tool permissions.
Comprehensive guidance for ClickHouse covering schema design, query optimization, data ingestion, and AI agent connectivity. Contains 31 rules across 4 main categories (schema, query, insert, agent), prioritized by impact.
AGENTS.mdREADME.mdmetadata.jsonrules/_sections.mdrules/_template.mdrules/agent-connect-mcp.mdrules/agent-discovery-schema.mdrules/agent-query-safety.mdrules/insert-async-small-batches.mdrules/insert-batch-size.mdrules/insert-format-native.mdrules/insert-mutation-avoid-delete.mdrules/insert-mutation-avoid-update.mdrules/insert-optimize-avoid-final.mdrules/query-index-skipping-indices.mdrules/query-join-choose-algorithm.mdrules/query-join-consider-alternatives.mdrules/query-join-filter-before.mdrules/query-join-null-handling.mdrules/query-join-use-any.mdConducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
Comprehensive guidance for ClickHouse covering schema design, query optimization, data ingestion, and AI agent connectivity. Contains 31 rules across 4 main categories (schema, query, insert, agent), prioritized by impact.
Official docs: ClickHouse Best Practices
Before answering ClickHouse questions, follow this priority order:
rules/ directoryrule-name..."Why rules take priority: ClickHouse has specific behaviors (columnar storage, sparse indexes, merge tree mechanics) where general database intuition can be misleading. The rules encode validated, ClickHouse-specific guidance.
Before querying ClickHouse, agents must establish a connection and follow the discovery workflow:
rules/agent-connect-mcp.md - Connection setup (MCP + CLI), credential discovery, output format selectionrules/agent-discovery-schema.md - CRITICAL: 7-step schema discovery workflowrules/agent-query-safety.md - CRITICAL: LIMIT, timeouts, progressive explorationEvery agent session should follow this sequence:
agent-connect-mcp)agent-query-safety)If your system dispatches ClickHouse tasks to specialized subagents:
Read these rule files in order:
rules/schema-pk-plan-before-creation.md - ORDER BY is immutablerules/schema-pk-cardinality-order.md - Column ordering in keysrules/schema-pk-prioritize-filters.md - Filter column inclusionrules/schema-types-native-types.md - Proper type selectionrules/schema-types-minimize-bitwidth.md - Numeric type sizingrules/schema-types-lowcardinality.md - LowCardinality usagerules/schema-types-avoid-nullable.md - Nullable vs DEFAULTrules/schema-partition-low-cardinality.md - Partition count limitsrules/schema-partition-lifecycle.md - Partitioning purposeCheck for:
Read these rule files:
rules/query-join-choose-algorithm.md - Algorithm selectionrules/query-join-filter-before.md - Pre-join filteringrules/query-join-use-any.md - ANY vs regular JOINrules/query-index-skipping-indices.md - Secondary index usagerules/schema-pk-filter-on-orderby.md - Filter alignment with ORDER BYCheck for:
Read these rule files:
rules/insert-batch-size.md - Batch sizing requirementsrules/insert-mutation-avoid-update.md - UPDATE alternativesrules/insert-mutation-avoid-delete.md - DELETE alternativesrules/insert-async-small-batches.md - Async insert usagerules/insert-optimize-avoid-final.md - OPTIMIZE TABLE risksCheck for:
Structure your response as follows:
## Rules Checked
- `rule-name-1` - Compliant / Violation found
- `rule-name-2` - Compliant / Violation found
...
## Findings
### Violations
- **`rule-name`**: Description of the issue
- Current: [what the code does]
- Required: [what it should do]
- Fix: [specific correction]
### Compliant
- `rule-name`: Brief note on why it's correct
## Recommendations
[Prioritized list of changes, citing rules]
| Priority | Category | Impact | Prefix | Rule Count |
|---|---|---|---|---|
| 1 | Primary Key Selection | CRITICAL | schema-pk- | 4 |
| 2 | Data Type Selection | CRITICAL | schema-types- | 5 |
| 3 | JOIN Optimization | CRITICAL | query-join- | 5 |
| 4 | Insert Batching | CRITICAL | insert-batch- | 1 |
| 5 | Mutation Avoidance | CRITICAL | insert-mutation- | 2 |
| 6 | Partitioning Strategy | HIGH | schema-partition- | 4 |
| 7 | Skipping Indices | HIGH | query-index- | 1 |
| 8 | Materialized Views | HIGH | query-mv- | 2 |
| 9 | Async Inserts | HIGH | insert-async- | 2 |
| 10 | OPTIMIZE Avoidance | HIGH | insert-optimize- | 1 |
| 11 | JSON Usage | MEDIUM | schema-json- | 1 |
| 12 | Agent Schema Discovery | CRITICAL | agent-discovery- | 1 |
| 13 | Agent Query Safety | CRITICAL | agent-query- | 1 |
| 14 | Agent Connectivity + Formats | HIGH | agent-connect- | 1 |
schema-pk-plan-before-creation - Plan ORDER BY before table creation (immutable)schema-pk-cardinality-order - Order columns low-to-high cardinalityschema-pk-prioritize-filters - Include frequently filtered columnsschema-pk-filter-on-orderby - Query filters must use ORDER BY prefixschema-types-native-types - Use native types, not String for everythingschema-types-minimize-bitwidth - Use smallest numeric type that fitsschema-types-lowcardinality - LowCardinality for <10K unique stringsschema-types-enum - Enum for finite value sets with validationschema-types-avoid-nullable - Avoid Nullable; use DEFAULT insteadschema-partition-low-cardinality - Keep partition count 100-1,000schema-partition-lifecycle - Use partitioning for data lifecycle, not queriesschema-partition-query-tradeoffs - Understand partition pruning trade-offsschema-partition-start-without - Consider starting without partitioningschema-json-when-to-use - JSON for dynamic schemas; typed columns for knownquery-join-choose-algorithm - Select algorithm based on table sizesquery-join-use-any - ANY JOIN when only one match neededquery-join-filter-before - Filter tables before joiningquery-join-consider-alternatives - Dictionaries/denormalization vs JOINquery-join-null-handling - join_use_nulls=0 for default valuesquery-index-skipping-indices - Skipping indices for non-ORDER BY filtersquery-mv-incremental - Incremental MVs for real-time aggregationsquery-mv-refreshable - Refreshable MVs for complex joinsinsert-batch-size - Batch 10K-100K rows per INSERTinsert-async-small-batches - Async inserts for high-frequency small batchesinsert-format-native - Native format for best performanceinsert-mutation-avoid-update - ReplacingMergeTree instead of ALTER UPDATEinsert-mutation-avoid-delete - Lightweight DELETE or DROP PARTITIONinsert-optimize-avoid-final - Let background merges workagent-discovery-schema - Always discover schema before queryingagent-query-safety - LIMIT, timeouts, progressive explorationagent-connect-mcp - MCP + CLI setup, credential discovery, output format selectionThis skill activates when you encounter:
AI agent connecting to ClickHouse (MCP, CLI, HTTP)
Agent workflow design for ClickHouse
Schema discovery or exploration requests
CREATE TABLE statements
ALTER TABLE modifications
ORDER BY or PRIMARY KEY discussions
Data type selection questions
Slow query troubleshooting
JOIN optimization requests
Data ingestion pipeline design
Update/delete strategy questions
ReplacingMergeTree or other specialized engine usage
Partitioning strategy decisions
Each rule file in rules/ contains:
For the complete guide with all rules expanded inline: AGENTS.md
Use AGENTS.md when you need to check multiple rules quickly without reading individual files.