主题
从 0 到 1 学习 ClickHouse
一套适合零基础小白入门、同时覆盖底层原理与面试高频考点的 ClickHouse 学习教程。 看完会用、用了懂原理、面试能答上。
✨ 项目简介
这不是一本「ClickHouse SQL 速查手册」,而是一本「OLAP 思维启蒙书 + ClickHouse 内核漫游指南」。
我们围绕三个底层硬核来组织教程:
- 列式存储:为什么同样的
SELECT SUM(amount) FROM orders在 ClickHouse 上比 MySQL 快 100 倍? - 向量化执行:为什么 ClickHouse 的查询计划是「批量 1024 行送进流水线」而不是「逐行处理」?
- MergeTree 家族:所有的去重、聚合、TTL、副本、物化视图,全都长在 MergeTree 这棵树上。
如果你之前用过 MySQL/PostgreSQL,但对「列存、Part、Granule、Mark、ReplacingMergeTree、物化视图、分布式表」这些词一脸懵 —— 这本教程就是为你写的。
📖 目录索引
| 章节 | 标题 | 状态 |
|---|---|---|
| 00 | 学习路线图(施工总图) | ✅ |
| 01 | ClickHouse 是什么 & 为什么快 | ✅ |
| 02 | 客户端与基础 SQL | ✅ |
| 03 | 数据类型详解 | ✅ |
| 04 | 表引擎全景图 | ⏳ |
| 05 | MergeTree 核心原理(灵魂章) | ⏳ |
| 06 | MergeTree 家族进阶 | ⏳ |
| 07 | 写入与读取最佳实践 | ⏳ |
| 08 | 聚合、窗口函数与数组 | ⏳ |
| 09 | JOIN 与字典 | ⏳ |
| 10 | 物化视图与 Projection(灵魂章) | ⏳ |
| 11 | TTL、分区与数据生命周期 | ⏳ |
| 12 | Mutation:UPDATE / DELETE 的真相 | ⏳ |
| 13 | 副本与分布式(灵魂章) | ⏳ |
| 14 | 集成生态 | ⏳ |
| 15 | 权限、配额与多租户 | ⏳ |
| 16 | 性能调优与查询分析 | ⏳ |
| 17 | 运维与可观测 | ⏳ |
| 18 | 生态与扩展 | ⏳ |
| 19 | 综合实战项目 | ⏳ |
🌐 全教程统一约定
| 项 | 约定 | 说明 |
|---|---|---|
| 服务端版本 | ClickHouse 24.x | 后续 SQL / 参数 / 系统视图都按 24.x 为准 |
| 客户端 | clickhouse-client(官方 CLI) | 第 2 章详细介绍 |
| HTTP 端口 | 8123 | 浏览器 / curl / clickhouse-connect 走它 |
| TCP 端口 | 9000 | clickhouse-client / clickhouse-driver 走它 |
| Python 客户端 | clickhouse-connect(HTTP,主推)+ clickhouse-driver(TCP,部分高性能场景) | 全教程一致 |
| SQL 风格 | 关键字大写,标识符小写 | 例:SELECT id, name FROM users WHERE id = 1 |
| 演示数据库 | learn_ck | 默认连接 host=127.0.0.1 port=8123 database=learn_ck user=default |
| 字符集 | UTF-8 | ClickHouse 内部字符串就是 UTF-8 字节流,不区分 charset |
🐳 5 分钟起个 ClickHouse
如果你的环境里还没有 ClickHouse Server,用本仓库根目录的 docker-compose.yml 一键起一个:
bash
# 1. 在仓库根目录执行
docker compose up -d
# 2. 等 5 秒后,验证服务起没起来
curl 'http://127.0.0.1:8123/?query=SELECT version()'
# → 24.x.x.xxxx
# 3. 用 clickhouse-client 进入交互(容器内)
docker exec -it learn_ck_server clickhouse-client
# 4. 把 learn_ck 库捡起来(compose 已自动创建,这里仅演示)
ck :) SHOW DATABASES;
ck :) USE learn_ck;
ck :) SELECT 1;
# 5. 不想用了
docker compose down # 保留数据
docker compose down -v # 删数据卷服务启动后默认对外暴露:
- 8123 → HTTP 接口(curl / 浏览器 / clickhouse-connect)
- 9000 → 原生 TCP 接口(clickhouse-client / clickhouse-driver)
- 9009 → 副本间通信端口(单机模式下也会监听)
数据卷挂在 ./data 下,停容器再起容器数据不会丢。docker-compose.yml 已自动建好 learn_ck 库,开箱即用。
💡 如果你已经在
127.0.0.1:8123有现成的 ClickHouse 实例,docker-compose 完全可以不启,直接进入正文章节即可。
🐍 Python 环境
bash
# 1. 创建虚拟环境(可选)
python3 -m venv .venv && source .venv/bin/activate
# 2. 安装依赖
pip install -r requirements.txt
# 3. 跑一下第 1 章的 hello world,验证连通性
python 01_intro/code/hello_ck.py依赖列表(requirements.txt):
| 包 | 作用 |
|---|---|
clickhouse-connect>=0.7 | 官方推荐 Python 客户端(走 HTTP,开箱即用) |
clickhouse-driver>=0.2.6 | 走 TCP,性能更高的备选客户端 |
pandas | 第 7 / 8 章批量造数与 DataFrame ↔ ClickHouse 互转 |
faker | 造演示数据(用户名、IP、UA、订单等) |
🎯 怎么学这本教程
完全 0 基础
按顺序看,每章先读 .md → 跑一遍 code/ → 打开 demo.html 在浏览器里点几下加深印象 → 做一遍章末面试题。不要跳章,第 1-3 章是地基。
已经用过 ClickHouse,想补底层
直接从第 5 章 MergeTree 核心原理开始,配合第 6、10、13 章三块灵魂内容;面试前再扫一遍 interview.md。
准备数仓 / 大数据面试
通读 interview.md,每一题都看一下章节正文里给出的「考察点 + 加分项」。重点章:1、5、6、10、13、16。
📁 仓库结构
learnNote/clickhouse/
├── README.md # ← 你正在看这个
├── 0_learn_plan.md # 学习路线图(19 章施工表)
├── docker-compose.yml # 一键起 ClickHouse 24.x(含 Keeper 内置)
├── requirements.txt # Python 依赖
│
├── 01_intro.md # 第 1 章正文
├── 01_intro/
│ ├── demo.html # 浏览器交互演示
│ └── code/
│ └── hello_ck.py # Python 实操
├── 02_client_basic.md
├── 02_client_basic/
│ ├── demo.html
│ ├── init.sql
│ └── code/basic_query.py
├── 03_data_types.md
├── 03_data_types/
│ ├── demo.html
│ ├── init.sql
│ └── code/types_play.py
└── ...🤝 反馈
教程是「活的」—— 看到任何不清楚 / 例子跑不通 / 类比奇怪的地方,欢迎在仓库提 Issue。
Happy Querying ⚡️ —— 让你的下一条
SELECT count(*) FROM ...秒级返回。