Skip to content

从 0 到 1 学习 ClickHouse

一套适合零基础小白入门、同时覆盖底层原理与面试高频考点的 ClickHouse 学习教程。 看完会用、用了懂原理、面试能答上。


✨ 项目简介

这不是一本「ClickHouse SQL 速查手册」,而是一本「OLAP 思维启蒙书 + ClickHouse 内核漫游指南」。

我们围绕三个底层硬核来组织教程:

  1. 列式存储:为什么同样的 SELECT SUM(amount) FROM orders 在 ClickHouse 上比 MySQL 快 100 倍?
  2. 向量化执行:为什么 ClickHouse 的查询计划是「批量 1024 行送进流水线」而不是「逐行处理」?
  3. MergeTree 家族:所有的去重、聚合、TTL、副本、物化视图,全都长在 MergeTree 这棵树上。

如果你之前用过 MySQL/PostgreSQL,但对「列存、Part、Granule、Mark、ReplacingMergeTree、物化视图、分布式表」这些词一脸懵 —— 这本教程就是为你写的。


📖 目录索引

章节标题状态
00学习路线图(施工总图)
01ClickHouse 是什么 & 为什么快
02客户端与基础 SQL
03数据类型详解
04表引擎全景图
05MergeTree 核心原理(灵魂章)
06MergeTree 家族进阶
07写入与读取最佳实践
08聚合、窗口函数与数组
09JOIN 与字典
10物化视图与 Projection(灵魂章)
11TTL、分区与数据生命周期
12Mutation: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 端口9000clickhouse-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-8ClickHouse 内部字符串就是 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 ... 秒级返回。