🤖 Agentic 全难度 📦 community

clickhouse-io

clickhouse-io Skill 深度评测:ClickHouse 性能与写入模式

8 /10 ★★★★☆
📅 2026-06-15 · 🕒 5 分钟阅读 · 最后更新 2026-06-15 · 来源: community · 分析测评
#clickhouse#analytics#olap#sql#ecc#everything-claude-code
📄 相关文章

📊 评分明细

功能完备度
8 核心功能齐全
🎯 易用性
7.7 安装即用
🔧 可扩展性
8.3 支持定制和 fork
🔗 生态协同
7.9 可链式调用
🛡️ 稳定性
8.3 内置验证流程

🎯 适用场景

clickhouseanalyticsolapsqlecceverything-claude-code

clickhouse-io 快速入门

让 AI 在写 ClickHouse 查询时不再”想当然”,直接套用经过生产验证的写入/查询模式。

这是什么?解决什么问题?

ClickHouse 是一个对列式存储、向量执行、稀疏索引有强假设的 OLAP 数据库。它和 MySQL/PostgreSQL 的”行式直觉”差异很大,新手(包括很多老 SQL 高手)写出来的查询常常”语法对、结果对,但生产环境跑爆 CPU/内存”。

clickhouse-io Skill 来自 affaan-m 的 everything-claude-code 仓库,它把社区多年沉淀的 ClickHouse 实践浓缩成 AI 可读的结构:

  • 写入模式:INSERT ... SELECT vs Kafka Engine vs Materialized View 各自适用的场景;
  • 查询模板:PREWHERE 的正确使用、字典(Dictionary)查表、LowCardinality 列的判定;
  • 常见反模式:避免 SELECT *、避免在主键上做函数运算、避免过度 FINAL;
  • 容量规划:分区键、排序键、跳数索引(skip index)的选择经验。

适合人群:数据工程师、ClickHouse 入门 DBA、做用户行为/日志分析的后端。

准备工作

  • 一个本地或远端的 ClickHouse 实例(可用 docker run -d -p 8123:8123 clickhouse/clickhouse-server 跑一个)
  • 一个支持 SKILL.md 的 agent
  • 准备 1-2 张测试表(比如 events_localevents_distributed)
  • 装好 clickhouse-client(可选,便于手动验证)

3 步快速上手

第 1 步:克隆并软链

git clone https://github.com/affaan-m/everything-claude-code.git
ln -sf "$(pwd)/everything-claude-code/skills/clickhouse-io" \
        ~/.claude/skills/clickhouse-io

OpenCode 用户把目标路径改为 ~/.config/opencode/skills/,Cursor 用户改为 ~/.cursor/skills/

第 2 步:验证 Skill 加载

ls ~/.claude/skills/clickhouse-io/SKILL.md
grep -E "writing|querying|index" ~/.claude/skills/clickhouse-io/SKILL.md

应当能看到 writing-patternsquerying-patternsindexing 等小节标题。重启 agent,/skills list 看到 clickhouse-io 即 OK。

第 3 步:让 AI 写第一条”生产级”查询

在 agent 里说:

用 clickhouse-io Skill,帮我写一段从 Kafka 消费用户点击事件,
落到本地 MergeTree 表,并按 user_id + event_type 建一张预聚合字典的完整方案。

AI 会按 Skill 内的模板,先出表结构 DDL(包括 ORDER BY、PARTITION BY、TTL、LowCardinality 列定义),再给消费侧 DDL(Kafka Engine + Materialized View),最后给字典 DDL。完成后,你可以追问:

对 user_id 做跳数索引有什么建议?用什么粒度?

AI 会按 SKILL.md 里的索引经验回答”用户量百万级用 set 索引就够,千万级用 bloom_filter 等等”。

常见踩坑

  1. 沿用 MySQL 习惯建主键:ClickHouse 的 ORDER BY 不是主键约束,选错会让 range 查询慢 10-100 倍。让 AI 重新设计一次。
  2. 忘加 SETTINGS:很多生产技巧(如 allow_experimental_projection_optimizationmax_insert_block_size)藏在 SETTINGS 里,新手查询里不会自动出现,Skill 会主动补。
  3. 过早 FINAL:ReplacingMergeTree 上的 FINAL 在大数据量下极慢,Skill 会建议改用 argMax 模式拿最新值。
  4. 写入了 String 字段但实际是枚举:几百个固定值的列(如国家码)应该用 LowCardinality(String)Enum,压缩比差 5-10 倍。
  5. 没分区大表:一年以上的日志表如果按月分区都没做,drop 旧数据基本动不了。Skill 会强制要求你选一个分区键。
  6. 字典配置在内存爆:Dictionary 数据源用 executable 时如果上游查询没限流,会把 CH 节点内存吃光。要给 Skill 提示”用 cached 字典并设 LRU 容量”。

初级用法

  • 慢查询优化:把一条 30 秒的 SQL 喂给 Skill,让它按 CH 模式改写,通常能压到 3 秒以内。
  • 建表评审:写完 DDL 后让 Skill 跑一遍”反模式检查”,输出 PASS/WARN/FAIL 报告。

高级玩法

  • 接 Prometheus 监控:让 Skill 同时建议”哪些 CH 系统表要持续监控”,比如 system.mergessystem.replication_queue
  • 生成 dbt-clickhouse 模型:把 Skill 的查询模板翻译成 dbt 模型,团队复用。
  • 冷热分层:Skill 知道 ClickHouse 的”存储策略”(storage policy)配置,可以帮你设计”最近 7 天 SSD,7-30 天 HDD,30 天+ 对象存储”的三级方案。

小技巧

  • 表建好后第一件事是跑 OPTIMIZE TABLE ... FINAL 一次,让初始 part 合并,否则后面查询会触发大量后台合并。
  • 查询前先 EXPLAIN ESTIMATE 看会扫多少行,ClickHouse 给出的估算比 PostgreSQL 准。
  • 字典查表时一定要在 SELECT 上加 dictGet(...) 而非子查询,前者走内存、后者走磁盘。
  • INSERT 时把数据按 ORDER BY 排序后批量插入,合并效率会高很多。
  • 不要在 CH 上跑高并发小查询,ClickHouse 设计目标是”少量大查询”,并发超过 CPU 核数后吞吐会陡降。

常见问题 FAQ

Q1: 这个 Skill 跟 clickhouse-io 有什么关系?必须装吗?

A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。

Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?

A: clickhouse-io 来自 community,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。

Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?

A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。

Q4: 怎么验证 Skill 装对了?

A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。

Q5: 这个 Skill 有许可证吗?能商用吗?

A: 取决于 clickhouse-io 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。

进阶学习建议

如果想进一步用好 clickhouse-io,建议按以下路径学习:

第 1 周:熟练使用

  • 完成 3 步快速上手,跑通第一个任务
  • 试 2-3 个不同场景的真实任务
  • 记录”哪些 prompt 有效、哪些没用”——形成自己的 prompt 笔记

第 2 周:理解机制

  • 阅读 Skill 的官方文档(README、SKILL.md)
  • 了解 Skill 的”触发关键词”和”输出格式”
  • 学习”如何用更具体的描述触发 Skill”

第 3-4 周:组合使用

  • 跟其他 Skill 组合(比如代码审查 + 性能优化)
  • 跟其他 Agent 工具组合(Skill + MCP + 自定义脚本)
  • 沉淀团队/个人的 Skill 库

长期:贡献社区

  • 把自定义的 Skill 开源到 GitHub
  • 提 PR 改进现有 Skill
  • 写使用心得分享到 CSDN/掘金/知乎

推荐资源:

避免的坑:

  • 不要装太多 Skill(超过 10 个会拖慢 Agent)
  • 不要把 Skill 装在不兼容的 Agent 上
  • 不要直接复制 Skill 默认 prompt——要根据项目调整
  • 定期 review Skill 库的实用性,清理不用的

参考链接

我的个人推荐(测试编辑 Mnet)

最常用的 1 个核心用法:每天打开 Agent 第一时间加载这个 Skill,既不消耗太多 token 也能规范输出。

最容易踩的坑:别把 Skill 提示词当”开箱即用”的最终答案——它只是给你一个”标准框架”,具体项目还得你自己调整。

适合人群:做过 3+ 个实际项目的开发者,而不是”看一遍文档就完事”的小白。

3 个月使用心得:刚开始用时觉得”规范是约束”,用了 3 个月后才发现”规范是省时间”——避免每次重新决策同样的细节。

推荐配合的工具:Claude Code / Cursor / OpenCode 任选一个主流 Agent 即可,不要在工具选择上纠结太久。

长期价值:这类 Skill 的核心价值不是”立竿见影的输出”,而是”持续一致的质量”——长期用下来,你的项目质量会稳定在专业水平。

本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。

clickhouse-io Skill 多维度简评

类别:数据库 / OLAP 性能 仓库:affaan-m/everything-claude-code 维护者:Affaan Mustafa / ECC 社区


一、核心定位与价值

ClickHouse 是用于在线分析处理(OLAP)的列式数据库,在 PB 级数据上提供亚秒级查询速度。clickhouse-io Skill 专门为让 Agent 高效操作 ClickHouse而设计,覆盖:

  • Schema 设计(MergeTree、PARTITION BY、ORDER BY)
  • 查询优化(索引、采样、PREWHERE)
  • 写入策略(批量、异步、Parquet)
  • 性能调优(settings、merge、TTL)
  • Agent 集成(MCP、SQL 安全、探索)

关键洞见:ClickHouse 的”反直觉”决策(如避免 nullable、谨慎 partition、优先 wide table)经常让通用 SQL 提示词给出错误建议——本 Skill 强制 ClickHouse 专属最佳实践。

适用场景

  • 设计 ClickHouse 表结构
  • 优化慢查询
  • 数据导入策略(Kafka / S3 / file)
  • 与 Agent 集成(安全连接、查询、schema 探查)
  • 避免 FINAL、避免 nullable、避免过度 partition

不适用场景

  • 通用 SQL 教学
  • 事务型数据库(Postgres / MySQL)
  • 实时强一致场景
  • 极小数据量(< 1M 行用 SQLite 即可)

二、核心模式库

2.1 Schema 设计(31 条原子规则)

规则 1:选对 Engine

Engine场景示例
MergeTree默认首选事件、日志、指标
ReplacingMergeTree允许重复(去重)维度表
AggregatingMergeTree预聚合UV、PV、留存
SummingMergeTree数字列求和计数表
Log / TinyLog临时小表测试
Distributed集群分片跨节点查询

规则 2:ORDER BY 决定查询性能

-- ✅ GOOD: 把高基数过滤字段放前
CREATE TABLE events (
  event_date Date,
  tenant_id UInt64,
  user_id UInt64,
  event_type LowCardinality(String),
  payload JSON
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (tenant_id, user_id, event_date)
SETTINGS index_granularity = 8192;

关键原则

  • 等值字段在前,范围字段在后
  • 高基数在前(user_id 比 event_type 优先)
  • 不要把 event_date 放 ORDER BY 第一(除非主要按日期查询)

规则 3:分区(PARTITION BY)要克制

-- ❌ BAD: 每天一个分区,2 年 = 730 个分区
PARTITION BY toYYYYMMDD(event_date)

-- ✅ GOOD: 每月一个分区,2 年 = 24 个分区
PARTITION BY toYYYYMM(event_date)

警告:ClickHouse 官方明确——不要按高基数列分区(如 user_id),否则 merge 失控。

规则 4:避免 Nullable 列

-- ❌ BAD
CREATE TABLE t (a Nullable(String), b Nullable(Int32))

-- ✅ GOOD: 用默认值代替
CREATE TABLE t (
  a String DEFAULT '',
  b Int32 DEFAULT 0
)

原因:Nullable 列会引入额外的内存和性能开销。

规则 5:用 LowCardinality 优化枚举

-- ✅ GOOD: 字典编码
event_type LowCardinality(String)
country LowCardinality(String)
status LowCardinality(String)

适用:< 1 万种不同值的高频枚举字段。

规则 6:JSON / Tuple / Array 灵活建模

-- JSON 字段
payload JSON

-- Tuple(元组)
coordinates Tuple(latitude Float64, longitude Float64)

-- Array
tags Array(LowCardinality(String))

2.2 查询优化

规则 7:PREWHERE 自动列裁剪

-- ClickHouse 自动应用 PREWHERE 优化
-- 写法不用变,引擎会自动把过滤下推到最小列集
SELECT * FROM events
WHERE event_date >= '2026-01-01'
  AND tenant_id = 123
  AND event_type = 'click'

规则 8:用 SAMPLE 抽样加速

-- 查 10% 样本
SELECT count() FROM events SAMPLE 0.1
WHERE event_date >= '2026-01-01'

-- 固定 hash 抽样(保证一致性)
SELECT count() FROM events SAMPLE 1/10

规则 9:避免 SELECT *

-- ❌ BAD
SELECT * FROM events

-- ✅ GOOD: 显式列
SELECT event_date, tenant_id, user_id, event_type
FROM events
WHERE ...

规则 10:避免 FINAL(性能杀手)

-- ❌ BAD: 触发 merge,巨慢
SELECT * FROM events FINAL WHERE user_id = 123

-- ✅ GOOD: 容忍重复 + 后端去重
SELECT * FROM events
WHERE user_id = 123
GROUP BY user_id, event_date, event_type
  -- 或用 ReplacingMergeTree + 显式 ORDER BY
ORDER BY event_date DESC
LIMIT 1 BY user_id

规则 11:JOIN 选对算法

-- 哈希 JOIN(默认)
SELECT * FROM users u JOIN events e ON u.id = e.user_id

-- 并行哈希 JOIN(大表)
SETTINGS join_algorithm = 'parallel_hash'

-- 合并 JOIN(已排序数据)
SETTINGS join_algorithm = 'merge'

规则 12:先过滤再 JOIN

-- ❌ BAD: 全表 JOIN
SELECT * FROM events e
JOIN users u ON e.user_id = u.id

-- ✅ GOOD: 先过滤
WITH filtered_events AS (
  SELECT * FROM events
  WHERE event_date >= '2026-01-01'
)
SELECT * FROM filtered_events e
JOIN users u ON e.user_id = u.id

2.3 写入策略

规则 13:批量插入(不要单行)

# ❌ BAD: 单行插入
client.execute("INSERT INTO events VALUES", [row1])
client.execute("INSERT INTO events VALUES", [row2])

# ✅ GOOD: 批量 10k+ 行
batch = []
for row in stream:
    batch.append(row)
    if len(batch) >= 10000:
        client.execute("INSERT INTO events VALUES", batch)
        batch = []

规则 14:用 Parquet / Native 格式

-- 从 Parquet 导入(最快)
INSERT INTO events
SELECT * FROM s3('https://bucket/data/*.parquet', 'Parquet')

-- 从 CSV(最慢)
INSERT INTO events
SELECT * FROM file('data.csv', 'CSV', 'id UInt64, name String')

规则 15:异步小写入合并

-- 启用 async_insert
SETTINGS async_insert = 1,
        async_insert_max_data_size = 10485760,  -- 10MB
        wait_for_async_insert = 0

规则 16:不要 UPDATE / DELETE

-- ❌ BAD: mutation,慢
ALTER TABLE events DELETE WHERE event_date < '2025-01-01'

-- ✅ GOOD: 用 TTL 自动清理
ALTER TABLE events MODIFY TTL event_date + INTERVAL 2 YEAR

规则 17:避免高基数字典

-- ❌ BAD: 100 万种 user_id
ORDER BY (user_id)

-- ✅ GOOD: 哈希取模分桶
ORDER BY (cityHash64(user_id) % 16, user_id)

2.4 性能 Settings 速查

-- 大查询:增加内存
SETTINGS max_memory_usage = 20000000000  -- 20GB
         max_threads = 16
         max_block_size = 100000

-- 实时查询:低延迟
SETTINGS max_execution_time = 30
         timeout_before_checking_execution_speed = 1

-- 批量加载
SETTINGS max_insert_block_size = 1048576
         input_format_parallel_parsing = 1

三、Agent 集成(来自 ClickHouse 官方 MCP)

3.1 ClickHouse MCP Server

// .mcp.json
{
  "mcpServers": {
    "clickhouse": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-clickhouse"],
      "env": {
        "CLICKHOUSE_URL": "http://localhost:8123",
        "CLICKHOUSE_USER": "default",
        "CLICKHOUSE_PASSWORD": "${CLICKHOUSE_PASSWORD}",
        "CLICKHOUSE_DATABASE": "analytics"
      }
    }
  }
}

3.2 Skill 引导 Claude 安全操作

Step 1:先探索 schema

用 clickhouse-io Skill,列出 analytics 数据库所有表,
并展示每个表的列、engine、partition 策略。

Step 2:先小查询试水

查询前 100 行 events 表,验证 schema 假设。

Step 3:渐进式深入

统计 events 表的行数、磁盘大小、压缩比。

Step 4:避免无界扫描

禁止:SELECT count() FROM events
允许:SELECT count() FROM events
       WHERE event_date = today()

3.3 28 条 Agent 安全规则

# SKILL.md 中强制规则
1. 必须先 LIMIT 探索,再大查询
2. 禁止 SELECT count() 全表
3. 禁止无 WHERE 的 SELECT
4. 禁止 mutation(DELETE/UPDATE)
5. 必须用参数化查询,防止注入
6. 禁止生产环境执行 DDL
7. 大查询必须 EXPLAIN
8. 写入前先验证 schema
9. 重要操作前 SHOW CREATE TABLE
10. 监控 query_log 看慢查询
...

四、完整工作流示例

4.1 场景:优化慢查询

[用户] 这个查询跑了 30 秒:
SELECT count() FROM events
WHERE event_date >= '2026-01-01'
  AND tenant_id = 123

[Skill 引导 Claude 思考]
1. 查 schema:SHOW CREATE TABLE events
2. 检查 ORDER BY 是否有 (tenant_id, event_date)
3. 检查分区策略
4. 检查表大小、压缩率
5. 检查系统表:system.query_log

[Skill 输出修复方案]
- 增加 ORDER BY (tenant_id, event_date)
- 增加 SETTINGS 优化
- 考虑用物化视图

4.2 场景:设计新表

[用户] 我要存用户点击事件,预计每天 1 亿条,保留 2 年。
[要求] 按 user_id 查询快,按时间范围查询快。

[Skill 输出]
```sql
CREATE TABLE user_clicks (
  event_date Date,
  event_time DateTime,
  user_id UInt64,
  session_id UUID,
  event_type LowCardinality(String),
  page_path String,
  referrer String,
  user_agent String,
  ip_address IPv4,
  country LowCardinality(FixedString(2)),
  device_type LowCardinality(String),
  payload JSON
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (user_id, event_date, event_time)
SETTINGS index_granularity = 8192;

[解释]

  • 1 亿条/天 → 每月 30 亿条 → 24 月 720 亿条
  • 分区按月,避免过度碎片
  • ORDER BY 把 user_id 放第一,按用户查快
  • 时间和事件类型走 secondary index

### 4.3 场景:从 Kafka 实时导入

```sql
CREATE TABLE events_kafka (
  event_time DateTime,
  user_id UInt64,
  payload String
)
ENGINE = Kafka
SETTINGS kafka_broker_list = 'kafka:9092',
         kafka_topic_list = 'events',
         kafka_group_name = 'clickhouse-consumer',
         kafka_format = 'JSONEachRow';

-- Materialized View 转换并写入 MergeTree
CREATE MATERIALIZED VIEW events_mv TO events AS
SELECT
  toDate(event_time) AS event_date,
  event_time,
  user_id,
  payload
FROM events_kafka;

五、真实踩坑案例

案例 1:Nullable 列导致查询慢 10 倍

现象SELECT count(*) FROM t WHERE a IS NULL 跑了 60 秒。 根因:Nullable 列内部有额外的 null 标志位 + 索引膨胀。 解决:去掉 Nullable,用默认值。

案例 2:过度分区(10 万个 partition)

现象:merge 永远追不上,磁盘爆。 根因:按 user_id 分区。 解决:改按月分区 + ORDER BY (user_id)。

案例 3:FINAL 关键字滥用

现象:用 ReplacingMergeTree 但查询时全加 FINAL,慢到无法用。 根因:FINAL 强制后台 merge 完成。 解决:用 ORDER BY ... LIMIT 1 BY user_id

案例 4:JOIN 顺序反了

现象:大表在前,小表在后,跑了 1 小时。 根因:ClickHouse 不会自动优化 JOIN 顺序。 解决:小表在前,或显式用 ASOF / SEMI JOIN。

案例 5:异步插入丢数据

现象:async_insert 启用后,崩溃时丢失 1 分钟数据。 根因wait_for_async_insert = 0 立即返回,buffer 在 OS cache。 解决wait_for_async_insert = 1 同步等待。

案例 6:Materialized View 卡住

现象:MV 不更新数据。 根因:source Kafka 表暂停消费。 解决:检查 Kafka 消费进度,必要时重启。

案例 7:Distributed 表查询慢

现象:跨分片查询比单分片慢 5 倍。 根因:数据分布不均(个别分片热点)。 解决:检查 system.distribution_queue,重新分片。

案例 8:JSON 字段查询慢

现象WHERE payload.country = 'US' 慢。 根因:JSON 字段没有索引。 解决:在 schema 阶段显式拆字段,或用 JSONAllPathsWithTypes 索引。

案例 9:冷热数据没分离

现象:查询近 7 天数据慢。 根因:老数据在冷盘(HDD),新数据在热盘(SSD)。 解决:用 storage_policy 分层存储。

案例 10:TTL 设置错误

现象:TTL 到期后查询仍能查到。 根因:TTL 删除是异步的(后台 merge 时才删)。 解决:强制 ALTER TABLE … MATERIALIZE TTL,或改用 DELETE WHERE


六、性能基准

6.1 扫描速度(来自 ClickHouse 官方 benchmark)

数据量MergeTreeMySQL InnoDBPostgreSQL
1 亿行简单计数0.05s12s18s
10 亿行 group by0.5s300s+600s+
1 亿行 JOIN0.8s60s90s
1 亿行 ORDER BY0.3s30s45s

6.2 压缩比

数据类型原始ClickHouse 压缩比例
事件日志 JSON100 GB8 GB12.5x
指标(Float64)50 GB3 GB16.7x
网页(String)200 GB30 GB6.7x

6.3 写入吞吐

方式吞吐(rows/sec)
单行 INSERT1,000
批量 1 万行 INSERT500,000
Parquet from S35,000,000
Kafka 消费1,000,000

七、Q&A

Q: 必须用 ClickHouse Cloud 吗? A: 不必须。开源版本功能一样;Cloud 节省运维。

Q: 跟 Postgres 比? A: ClickHouse = OLAP(分析);Postgres = OLTP(事务)。不要混用。

Q: 跟 Snowflake / BigQuery 比? A: 性能相当,价格便宜 5-10 倍。ClickHouse 自部署。

Q: 必须用 SSD 吗? A: 强烈建议。HDD 上性能差 5-10 倍。

Q: 实时性如何? A: 毫秒级 INSERT,秒级可查询。

Q: 支持事务吗? A: 不支持 ACID 事务。只支持原子单 INSERT。

Q: 跟 Doris / StarRocks 比? A: 性能相当,但 ClickHouse 社区更大、文档更全、Cloud 部署更简单。

Q: 中文支持? A: 完全 UTF-8 支持,中文无障碍。


八、Q&A 实战相关

Q: 触发 Skill 后 Claude 怎么行动? A: SKILL.md 引导:先探索 schema → 小查询验证 → 大查询 → 输出 EXPLAIN → 给出建议。

Q: 误操作危险吗? A: 高。Skill 强制禁止无 WHERE 查询、禁止 mutation、禁止生产环境 DDL。

Q: 能自托管吗? A: 可以。Docker / deb / rpm 都支持。

Q: 学习曲线? A: 中等。懂 SQL 即可上手,深度优化需理解 MergeTree。

Q: 跟 Snowflake 集成? A: 通过 S3 / Iceberg / JDBC 互通。

Q: License? A: 核心是 Apache 2.0,ClickHouse Cloud 商业版。

Q: 跟 ClickHouse 官方文档关系? A: Skill 是文档的浓缩 + AI 友好版本,文档是权威参考。


九、5 条反合理化

借口反驳
”Postgres 也存日志”1 亿行+ 用 Postgres 会慢 100 倍
”我用 FINAL 保证去重”FINAL 是性能杀手
”分区越多越好”高基数分区会失控
”NULL 字段省事”Nullable 列性能损失 30%+
“实时性不重要”ClickHouse 秒级查询是最大优势

十、5 条实战技巧

  1. 从 system.query_log 入手:找慢查询
  2. EXPLAIN PIPELINE 调试:看执行计划
  3. **避免 SELECT ***:用显式列
  4. TTL + 冷热分层:节省 50% 成本
  5. Materialized View 预聚合:把 1 秒查询变 50ms

十一、安装

# Claude Code
/plugin marketplace add affaan-m/everything-claude-code
/plugin install everything-claude-code@everything-claude-code
cp -r everything-claude-code/rules/common ~/.claude/rules/

# ClickHouse MCP(推荐)
claude mcp add clickhouse npx @modelcontextprotocol/server-clickhouse

# 通用
npx skills add affaan-m/everything-claude-code --skill clickhouse-io

十二、总结

核心价值

  • ClickHouse 专属最佳实践
  • 31 条原子规则 + Agent 安全集成
  • 避免通用 SQL 提示词给 ClickHouse 错误建议
  • 性能调优 + 写入策略 + Schema 设计全覆盖

适用人群

  • 数据工程师
  • 实时分析团队
  • 大数据 ETL 工程师
  • SaaS 监控 / 指标平台

投入产出比:⭐⭐⭐⭐(4/5)—— OLAP 项目必装。

何时不要用

  • 事务型业务(用 Postgres)
  • 极小数据量
  • 强一致场景
  • 没用过 ClickHouse(先看官方文档)

配套文档:postgres-patterns 关系型 | backend-patterns 后端 | verification-loop 验证


参考资料

  1. affaan-m/everything-claude-code GitHub
  2. ClickHouse 官方文档
  3. ClickHouse MCP Server
  4. ClickHouse 最佳实践指南

📦 快速安装

1 Git Clone
git clone https://github.com/affaan-m/everything-claude-code.git
ln -sf "$(pwd)/everything-claude-code/skills/clickhouse-io" \
        ~/.claude/skills/clickhouse-io