clickhouse-best-practices by clickhouse/agent-skills
npx skills add https://github.com/clickhouse/agent-skills --skill clickhouse-best-practices涵盖模式设计、查询优化和数据摄入的 ClickHouse 全面指南。包含 3 个主要类别(模式、查询、插入)共 28 条规则,按影响优先级排序。
在回答 ClickHouse 问题之前,请遵循以下优先级顺序:
rules/ 目录中是否有适用的规则rule-name..."来引用它们为什么规则优先: ClickHouse 具有特定的行为(列式存储、稀疏索引、合并树机制),在这些方面,通用的数据库直觉可能会产生误导。这些规则编码了经过验证的、针对 ClickHouse 的特定指导。
当对模式、查询或数据摄入进行正式审查时:
按顺序阅读这些规则文件:
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
rules/schema-pk-plan-before-creation.md - ORDER BY 是不可变的rules/schema-pk-cardinality-order.md - 键中的列排序rules/schema-pk-prioritize-filters.md - 筛选列包含rules/schema-types-native-types.md - 正确的类型选择rules/schema-types-minimize-bitwidth.md - 数值类型大小调整rules/schema-types-lowcardinality.md - LowCardinality 用法rules/schema-types-avoid-nullable.md - Nullable 与 DEFAULTrules/schema-partition-low-cardinality.md - 分区数量限制rules/schema-partition-lifecycle.md - 分区目的检查:
阅读这些规则文件:
rules/query-join-choose-algorithm.md - 算法选择rules/query-join-filter-before.md - 连接前筛选rules/query-join-use-any.md - ANY 与常规 JOINrules/query-index-skipping-indices.md - 二级索引用法rules/schema-pk-filter-on-orderby.md - 筛选与 ORDER BY 对齐检查:
阅读这些规则文件:
rules/insert-batch-size.md - 批处理大小要求rules/insert-mutation-avoid-update.md - UPDATE 替代方案rules/insert-mutation-avoid-delete.md - DELETE 替代方案rules/insert-async-small-batches.md - 异步插入用法rules/insert-optimize-avoid-final.md - OPTIMIZE TABLE 风险检查:
按以下结构组织你的回答:
## 已检查的规则
- `rule-name-1` - 合规 / 发现违规
- `rule-name-2` - 合规 / 发现违规
...
## 发现
### 违规项
- **`rule-name`**: 问题描述
- 当前情况:[代码做了什么]
- 要求:[应该做什么]
- 修复方法:[具体的修正]
### 合规项
- `rule-name`: 简要说明为何正确
## 建议
[按优先级排序的更改列表,引用规则]
| 优先级 | 类别 | 影响 | 前缀 | 规则数量 |
|---|---|---|---|---|
| 1 | 主键选择 | 关键 | schema-pk- | 4 |
| 2 | 数据类型选择 | 关键 | schema-types- | 5 |
| 3 | JOIN 优化 | 关键 | query-join- | 5 |
| 4 | 插入批处理 | 关键 | insert-batch- | 1 |
| 5 | 避免数据变更 | 关键 | insert-mutation- | 2 |
| 6 | 分区策略 | 高 | schema-partition- | 4 |
| 7 | 跳数索引 | 高 | query-index- | 1 |
| 8 | 物化视图 | 高 | query-mv- | 2 |
| 9 | 异步插入 | 高 | insert-async- | 2 |
| 10 | 避免 OPTIMIZE | 高 | insert-optimize- | 1 |
| 11 | JSON 使用 | 中 | schema-json- | 1 |
schema-pk-plan-before-creation - 在创建表之前规划 ORDER BY(不可变)schema-pk-cardinality-order - 按列基数从低到高排序schema-pk-prioritize-filters - 包含频繁筛选的列schema-pk-filter-on-orderby - 查询筛选必须使用 ORDER BY 前缀schema-types-native-types - 使用原生类型,而不是所有内容都用 Stringschema-types-minimize-bitwidth - 使用适合的最小数值类型schema-types-lowcardinality - 对于 <10K 唯一字符串使用 LowCardinalityschema-types-enum - 对于有限值集使用 Enum 进行验证schema-types-avoid-nullable - 避免使用 Nullable;改用 DEFAULTschema-partition-low-cardinality - 保持分区数量在 100-1,000 之间schema-partition-lifecycle - 将分区用于数据生命周期管理,而非查询schema-partition-query-tradeoffs - 理解分区修剪的权衡schema-partition-start-without - 考虑开始时不分区的方案schema-json-when-to-use - JSON 用于动态模式;已知模式使用类型化列query-join-choose-algorithm - 根据表大小选择算法query-join-use-any - 当只需要一个匹配时使用 ANY JOINquery-join-filter-before - 在连接前筛选表query-join-consider-alternatives - 字典/反规范化与 JOIN 的权衡query-join-null-handling - 对于默认值使用 join_use_nulls=0query-index-skipping-indices - 为非 ORDER BY 筛选列使用跳数索引query-mv-incremental - 用于实时聚合的增量物化视图query-mv-refreshable - 用于复杂连接的可刷新物化视图insert-batch-size - 每次 INSERT 批处理 10K-100K 行insert-async-small-batches - 对高频小批量使用异步插入insert-format-native - 使用原生格式以获得最佳性能insert-mutation-avoid-update - 使用 ReplacingMergeTree 替代 ALTER UPDATEinsert-mutation-avoid-delete - 使用轻量级 DELETE 或 DROP PARTITIONinsert-optimize-avoid-final - 让后台合并工作当您遇到以下情况时,此技能将被激活:
CREATE TABLE 语句ALTER TABLE 修改ORDER BY 或 PRIMARY KEY 讨论rules/ 目录中的每个规则文件包含:
如需包含所有规则内联扩展的完整指南,请查看:AGENTS.md
当您需要快速检查多个规则而无需阅读单个文件时,请使用 AGENTS.md。
每周安装
1.0K
仓库
GitHub 星标
349
首次出现
2026 年 1 月 27 日
安全审计
安装于
opencode905
codex899
gemini-cli889
github-copilot886
amp859
kimi-cli859
Comprehensive guidance for ClickHouse covering schema design, query optimization, and data ingestion. Contains 28 rules across 3 main categories (schema, query, insert), 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.
When performing a formal review of schemas, queries, or data ingestion:
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 limitsCheck 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- |
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 workThis skill activates when you encounter:
CREATE TABLE statementsALTER TABLE modificationsORDER BY or PRIMARY KEY discussionsEach 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.
Weekly Installs
1.0K
Repository
GitHub Stars
349
First Seen
Jan 27, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
opencode905
codex899
gemini-cli889
github-copilot886
amp859
kimi-cli859
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
102,200 周安装
rules/schema-partition-lifecycle.md| 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 |