关于 clickhouse-best-practices
clickhouse-best-practices 是面向 Agent 的 ClickHouse 指南,按优先级覆盖表结构、查询、写入和 Agent 连接。它要求先查阅适用规则、查询前发现表结构,并在回答中引用依据。
主要功能
- 01按四类组织 31 条规则
- 02优先覆盖表结构、查询和写入建议
- 03规定 Agent 连接与表结构发现步骤
- 04强调 LIMIT、超时等查询安全措施
- 05要求回答引用规则或来源
适用场景
- 01审查 ClickHouse 表结构
- 02优化查询与 JOIN
- 03规划数据写入和变更策略
- 04设计连接 ClickHouse 的 Agent 工作流
MCP 相关
该技能包含通过 MCP 或 CLI 连接 ClickHouse 的指导,涵盖凭据和输出格式,并提供表结构发现与查询安全规则;它本身不提供 MCP 服务。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ clickhouse/ agent-skills --skill clickhouse-best-practices安装后在 Claude Code 中输入/clickhouse-best-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonREADME.mdrules/_sections.md_template.mdagent-connect-mcp.mdagent-discovery-schema.mdagent-query-safety.mdinsert-async-small-batches.mdinsert-batch-size.mdinsert-format-native.mdinsert-mutation-avoid-delete.mdinsert-mutation-avoid-update.mdinsert-optimize-avoid-final.mdquery-index-skipping-indices.mdquery-join-choose-algorithm.mdquery-join-consider-alternatives.mdquery-join-filter-before.mdquery-join-null-handling.mdquery-join-use-any.mdquery-mv-incremental.mdquery-mv-refreshable.mdschema-json-when-to-use.mdschema-partition-lifecycle.mdschema-partition-low-cardinality.mdschema-partition-query-tradeoffs.mdschema-partition-start-without.mdschema-pk-cardinality-order.mdschema-pk-filter-on-orderby.mdschema-pk-plan-before-creation.md详细介绍
ClickHouse 最佳实践
涵盖 ClickHouse 的全面指南,包括架构设计、查询优化、数据写入和 AI Agent 连接。包含 4 个主要类别(架构、查询、插入、Agent)中的 31 条规则,并按影响程度排序。
官方文档: ClickHouse 最佳实践
重要:如何应用此技能
回答 ClickHouse 问题之前,请按以下优先级执行:
- 检查
rules/目录中是否有适用规则 - 如果有规则: 应用规则,并在回答中引用,使用“根据
rule-name……” - 如果没有规则: 使用大模型掌握的 ClickHouse 知识或搜索文档
- 如果不确定: 使用网页搜索查找当前最佳实践
- 始终注明来源: 规则名称、“ClickHouse 通用指南”或 URL
规则优先的原因: ClickHouse 有一些特定行为(列式存储、稀疏索引、合并树机制),通用数据库经验可能会产生误导。这些规则汇总了经过验证的 ClickHouse 专属指导。
Agent 连接与查询工作流
查询 ClickHouse 之前,Agent 必须建立连接并遵循发现工作流:
rules/agent-connect-mcp.md- 连接设置(MCP + CLI)、凭据发现、输出格式选择rules/agent-discovery-schema.md- 关键: 7 步架构发现工作流rules/agent-query-safety.md- 关键: LIMIT、超时、渐进式探索
每次 Agent 会话都应遵循以下顺序:
- 连接 — 通过 MCP 或 CLI 建立连接(参见
agent-connect-mcp) - 发现 — 数据库 → 表 → 列 + 注释 → 排序键 → 跳过索引 → 样本 → EXPLAIN
- 规划 — 利用排序键和跳过索引知识编写高效的 WHERE 子句
- 执行 — 使用 LIMIT 和超时运行查询
- 恢复 — 遇到超时或内存错误时,缩小筛选范围并重试(参见
agent-query-safety)
子 Agent 架构说明
如果你的系统会将 ClickHouse 任务分派给专用子 Agent:
- 架构发现 + 查询执行: 任何模型均可——这些步骤是程序性的
- EXPLAIN 分析 + 查询优化: 使用中档推理能力的模型效果更好
- 根据全部 28 条规则审查架构设计: 使用中档推理能力的模型效果更好
审查流程
架构审查(CREATE TABLE、ALTER TABLE)
按顺序阅读以下规则文件:
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- 分区用途
检查以下内容:
- PRIMARY KEY / ORDER BY 列顺序(基数由低到高)
- 数据类型与实际数据范围相符
- 在适当的字符串列上使用 LowCardinality
- 分区键基数有上限(100-1,000 个值)
- 使用 ReplacingMergeTree 时包含版本列
查询审查(SELECT、JOIN、聚合)
阅读以下规则文件:
rules/query-join-choose-algorithm.md- 算法选择rules/query-join-filter-before.md- 连接前筛选rules/query-join-use-any.md- ANY 与常规 JOIN 的选择rules/query-index-skipping-indices.md- 二级索引的使用rules/schema-pk-filter-on-orderby.md- 筛选条件与 ORDER BY 的对齐
检查以下内容:
- 筛选条件使用 ORDER BY 前缀列
- JOIN 前先筛选表(而不是 JOIN 后)
- 根据表大小选择正确的 JOIN 算法
- 为非 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 的风险
检查以下事项:
- 每次 INSERT 的批次大小为 10K-100K 行
- 频繁更改时不使用 ALTER TABLE UPDATE
- 更新模式使用 ReplacingMergeTree 或 CollapsingMergeTree
- 高频小批次场景启用异步插入
输出格式
请按以下格式组织回复:
## 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]
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 | 规则数量 |
|---|---|---|---|---|
| 1 | 主键选择 | CRITICAL | schema-pk- | 4 |
| 2 | 数据类型选择 | CRITICAL | schema-types- | 5 |
| 3 | JOIN 优化 | CRITICAL | query-join- | 5 |
| 4 | 插入批处理 | CRITICAL | insert-batch- | 1 |
| 5 | 避免变更操作 | CRITICAL | insert-mutation- | 2 |
| 6 | 分区策略 | HIGH | schema-partition- | 4 |
| 7 | 跳数索引 | HIGH | query-index- | 1 |
| 8 | 物化视图 | HIGH | query-mv- | 2 |
| 9 | 异步插入 | HIGH | insert-async- | 2 |
| 10 | 避免 OPTIMIZE | HIGH | insert-optimize- | 1 |
| 11 | JSON 用法 | MEDIUM | schema-json- | 1 |
| 12 | Agent 架构发现 | CRITICAL | agent-discovery- | 1 |
| 13 | Agent 查询安全性 | CRITICAL | agent-query- | 1 |
| 14 | Agent 连接与格式 | HIGH | agent-connect- | 1 |
快速参考
架构设计 - 主键(CRITICAL)
schema-pk-plan-before-creation- 创建表之前规划 ORDER BY(不可更改)schema-pk-cardinality-order- 按基数从低到高排列列schema-pk-prioritize-filters- 纳入经常用于筛选的列schema-pk-filter-on-orderby- 查询筛选条件必须使用 ORDER BY 前缀
架构设计 - 数据类型(CRITICAL)
schema-types-native-types- 使用原生类型,不要所有内容都使用 Stringschema-types-minimize-bitwidth- 使用能够容纳数据的最小数值类型schema-types-lowcardinality- 对唯一字符串少于 10K 的列使用 LowCardinalityschema-types-enum- 对有限值集合使用 Enum 并进行验证schema-types-avoid-nullable- 避免 Nullable;改用 DEFAULT
架构设计 - 分区(HIGH)
schema-partition-low-cardinality- 将分区数量控制在 100-1,000schema-partition-lifecycle- 将分区用于数据生命周期管理,而非查询schema-partition-query-tradeoffs- 了解分区裁剪的权衡schema-partition-start-without- 考虑从不分区开始
架构设计 - JSON(MEDIUM)
schema-json-when-to-use- 动态架构使用 JSON;已知字段使用类型化列
查询优化 - JOIN(CRITICAL)
query-join-choose-algorithm- 根据表大小选择算法query-join-use-any- 只需一个匹配项时使用 ANY JOINquery-join-filter-before- JOIN 前筛选表query-join-consider-alternatives- 权衡字典/反规范化与 JOINquery-join-null-handling- 使用 join_use_nulls=0 获取默认值
查询优化 - 索引(HIGH)
query-index-skipping-indices- 对非 ORDER BY 筛选条件使用跳数索引
查询优化 - 物化视图(HIGH)
query-mv-incremental- 使用增量 MV 实现实时聚合query-mv-refreshable- 使用可刷新的 MV 处理复杂 JOIN
插入策略 - 批处理(CRITICAL)
insert-batch-size- 每次 INSERT 批处理 10K-100K 行
插入策略 - 异步(HIGH)
insert-async-small-batches- 高频小批次使用异步插入insert-format-native- 使用 Native 格式以获得最佳性能
插入策略 - 变更(CRITICAL)
insert-mutation-avoid-update- 使用 ReplacingMergeTree 代替 ALTER UPDATEinsert-mutation-avoid-delete- 使用轻量级 DELETE 或 DROP PARTITION
插入策略 - 优化(HIGH)
insert-optimize-avoid-final- 让后台合并发挥作用
Agent 集成 - 发现(CRITICAL)
agent-discovery-schema- 查询前始终先发现架构
Agent 集成 - 安全(CRITICAL)
agent-query-safety- 使用 LIMIT、超时和渐进式探索
Agent 集成 - 连接 + 格式(HIGH)
agent-connect-mcp- MCP + CLI 设置、凭据发现和输出格式选择
何时应用
遇到以下情况时,此技能会启用:
-
AI Agent 连接到 ClickHouse(MCP、CLI、HTTP)
-
ClickHouse 的 Agent 工作流设计
-
架构发现或探索请求
-
CREATE TABLE语句 -
ALTER TABLE修改 -
关于
ORDER BY或PRIMARY KEY的讨论 -
数据类型选择问题
-
慢查询排查
-
JOIN 优化请求
-
数据导入管道设计
-
更新/删除策略问题
-
ReplacingMergeTree 或其他专用引擎的用法
-
分区策略决策
规则文件结构
rules/ 中的每个规则文件都包含:
- YAML frontmatter:标题、影响级别、标签
- 简要说明:此规则的重要性
- 错误示例:反模式及其说明
- 正确示例:最佳实践及其说明
- 补充背景:权衡、适用场景和参考资料
完整编译文档
如需查看所有规则展开后的完整指南:AGENTS.md
如果需要快速检查多条规则,而无需阅读单个文件,请使用 AGENTS.md。