Skills
Chapter 4 of 11
MUST USE when reviewing ClickHouse schemas, queries, or configurations.
4 minutes · 944 words · 27 sections
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 (opens in a new tab)
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.
Install this repository
npx skills add ClickHouse/agent-skills/plugin marketplace add ClickHouse/agent-skillsSkills install per repository, not per chapter — the CLI has no documented per-skill form, so we do not print one.
MUST USE when reviewing ClickHouse schemas, queries, or configurations. Contains 31 rules that MUST be checked before providing recommendations. Always read relevant rule files and cite specific rules in responses.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
skills/clickhouse-best-practices/SKILL.mdmain, last pushed 6 August 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by ClickHouse, declaring 8 plugins. It is read for editorial metadata only — never as the skill index, which is always the repository tree./ClickHouse/agent-skills.md, and each chapter at its own .md URL.36 files · 128 KB
Everything this skill ships beside its prose. All of it is set here, as subchapters of chapter 4.
Everything else published alongside the skill.
rules/33 files · 64 KB