一个故事让你理解 DuckDB
想象这个场景:
你是公司的运营,每天都要看销售报表。数据在 Excel 里,但文件太大(几百 MB),Excel 打开要5分钟,筛选一下又要卡半天。
你求助技术部门,对方说「下周排期」。你只好硬着头皮学 Python,装 Pandas,结果光配环境就花了一下午,最后发现内存不够——8GB 的电脑根本跑不动。
这时候,一个朋友发给你一个 不到30MB 的小程序,说:
「双击打开,输入
SELECT * FROM '销售数据.csv',回车。」
你试了一下——0.3 秒,数据出来了。
这个程序,就是 DuckDB。
DuckDB 到底是什么?
官方定义: 一个嵌入式列式数据库,专门做分析型查询(OLAP)。
人话版:
- 嵌入式 → 不用装服务器,不用配端口,下载一个文件就能用
- 列式存储 → 处理大数据的性能,比 MySQL/SQLite 快 10-100 倍
- 分析型 → 专为「算总数、求平均、分组汇总」这种查询而生
一句话:DuckDB = Excel 的易用性 + 数据库的查询能力 + 超级快的分析速度。
DuckDB 的 5 大核心优势
优势一:零配置,双击即用
这不是夸张。下载下来直接运行:
# 一行命令安装(Mac/Linux)
curl -sL https://install.duckdb.org | sh
# 或者 Windows 下载 zip,解压后双击 duckdb.exe
安装完不用配任何东西,直接进交互界面:
SELECT 'Hello, DuckDB!' AS greeting;
输出一个漂亮的表格,全程不到 10 秒。
对比一下:
- MySQL:安装 → 启动服务 → 配用户 → 建库 → 建表 → 才能查
- PostgreSQL:同上,可能更复杂
- DuckDB:下载 → 打开 → 查
这就是嵌入式数据库的威力——它跑在你的程序里,不跑在服务器上。
优势二:直接查文件,不「导入」数据
这是 DuckDB 最让人上头的功能。
绝大多数数据库要求你先「建表 → 定义结构 → 导入数据」才能查询。DuckDB 不需要。
-- 直接查 CSV,就像它是表一样
SELECT region,
COUNT(*) AS 订单数,
SUM(amount) AS 总金额
FROM 'sales_2026.csv'
GROUP BY region
ORDER BY 总金额 DESC;
支持的文件格式多到离谱:
| 格式 | 写法 | 场景 |
|---|---|---|
| CSV | FROM 'data.csv' | 从 Excel 导出的表格 |
| Parquet | FROM 'data.parquet' | 大数据格式,又快又省空间 |
| JSON | FROM 'data.jsonl' | API 导出的日志文件 |
| Excel | FROM 'data.xlsx' | 直接读 Excel 文件 |
| Arrow | FROM 'data.arrow' | 高性能二进制格式 |
最实用的场景: 老板甩给你一个 CSV,不用打开 Excel 卡死,不用写 Python 脚本,直接在终端里一条 SQL 就能算出结果。
优势三:处理大数据,比你想的快得多
DuckDB 用列式存储,专门为分析型查询优化。
同样是求平均值,MySQL 和 DuckDB 的底层逻辑完全不同:
- MySQL(行式存储): 读一行→找到金额字段→记下来→读下一行……重复 1000 万次
- DuckDB(列式存储): 直接把「金额」那一列数据整块拉出来→一次算完
真实基准测试数据(来源于社区):
| 操作 | SQLite | DuckDB | 速度差 |
|---|---|---|---|
| 1亿行COUNT | 8.5s | 0.3s | 28x |
| 1亿行SUM+GROUP BY | 崩溃 | 1.2s | ∞ |
| 10GB CSV 查询 | 内存不足 | 2.1s | ∞ |
注意: 这些数据不是在 128GB 的服务器上跑出来的,是在你办公用的笔记本电脑上。
这也是为什么 AI 和数据圈都在说:「DuckDB 是数据分析界的瑞士军刀」。
优势四:Python 生态无缝衔接
如果你是 Python 用户,DuckDB 会彻底改变你处理数据的方式。
安装:
pip install duckdb
告别 Pandas 的复杂 API:
import duckdb
# 用 SQL 处理 Pandas DataFrame!
df = duckdb.sql("""
SELECT
department,
AVG(salary) AS avg_salary,
COUNT(*) AS headcount
FROM df_employees
WHERE salary > 80000
GROUP BY department
ORDER BY avg_salary DESC
""").df()
你不需要学 Pandas 的 groupby、merge、apply 等几十个方法。 一行 SQL 全搞定。
而且 DuckDB 能直接查 Pandas DataFrame、PyArrow Table、Polars DataFrame——无论数据在什么格式里,统一用 SQL 查询。
# 查询 Parquet 文件,结果转 Pandas
result = duckdb.sql("""
SELECT date_trunc('month', order_date) AS month,
SUM(revenue) AS total
FROM 'sales/*.parquet'
GROUP BY month
ORDER BY month
""").df()
用 DuckDB 做数据分析,相当于给 Python 装上了 SQL 引擎——简单、快、不挑数据格式。
优势五:小到离谱,强到离谱
DuckDB 的可执行文件只有 不到 30MB。
打包到 Docker 镜像里?200MB 的基础镜像 + 30MB 的 DuckDB = 230MB。对比 Spark 镜像动辄 2GB+。
嵌入到 Web 应用里?可以在浏览器中跑 DuckDB-WASM,前端直接做数据分析。
能做的事:
- ✅ 替代 Excel 处理大文件
- ✅ 替代 Pandas 做数据分析
- ✅ 跑在 CI/CD 里做数据测试
- ✅ 嵌入到 Streamlit 应用里做数据分析后台
- ✅ 和 dbt 配合做数据转换
- ✅ 在浏览器里直接分析数据
不能做的事(认清边界):
- ❌ 不能替代 MySQL/PostgreSQL 做在线交易系统
- ❌ 不能单机处理 100TB+ 级别的数据(那是 Spark 的活)
- ❌ 不支持高并发写操作(它是分析型,不是事务型)
谁应该学 DuckDB?
| 角色 | 为什么学 |
|---|---|
| 数据分析师 | 告别 Excel 卡顿,用 SQL 直接分析 CSV/Excel |
| Python 开发者 | 替代 Pandas 的复杂 API,SQL 更简洁更快 |
| 数据工程师 | 快速做 ETL、数据验证,不用搭 Spark 集群 |
| 后端开发者 | 嵌入到应用里做本地分析,比 SQLite 快很多 |
| 产品/运营 | 问技术要数据太慢?自己用 SQL 查 CSV 秒出结果 |
10分钟上手 DuckDB
第一步:安装
# macOS
brew install duckdb
# Linux / WSL
curl -sL https://install.duckdb.org | sh
# Windows
# 下载:https://duckdb.org/download/ → duckdb.exe
# Python
pip install duckdb
第二步:查数据
随便找一个 CSV 文件(Excel 可以另存为 CSV),运行:
duckdb
然后在 DuckDB 终端里:
SELECT * FROM '你的文件.csv' LIMIT 10;
如果你不知道用哪个文件,DuckDB 自带示例数据:
-- DuckDB 内置数据集
SELECT *
FROM read_csv_auto('https://duckdb.org/data/weather.csv')
LIMIT 5;
第三步:算汇总
SELECT
city,
AVG(temperature) AS 平均温度,
MIN(temperature) AS 最低温,
MAX(temperature) AS 最高温
FROM 'weather.csv'
GROUP BY city;

总结
DuckDB 最大的价值不是「数据库」,而是 让数据分析变得极度简单。
在 Excel 和 Spark 之间,有一大片空白地带——数据大到 Excel 打不开,又小到不值得上 Spark。这个地带,就是 DuckDB 的天下。
如果看了这篇文章想试试,直接装一个,找个 CSV 文件跑条 SQL,5 分钟就能感受到它的爽。
相关文章:
📖 更多内容: https://duckdblab.org #DuckDB #入门教程 #数据分析 #SQL #数据工具