DuckDB 分析型数据库(Analytics Database):把数据仓库装进笔记本
一天被下载超过一百万次、五个人的创始团队没融资就撑了五年,2026 年 8 月 26 日被 AWS 整队收编——DuckDB 凭什么?答案藏在「列存 + 向量化 + 进程内嵌入式」这三件套里:一台笔记本,也能跑亿级行的分析 SQL。
先看一条今天的新闻:2026 年 8 月 26 日,AWS 官宣 DuckDB 背后的公司 DuckLabs 加入 AWS,9 月初生效。这个每天被下载超过 100 万次的开源数据库,靠 5 年 bootstrap 做到 30 多人规模,没拿一轮风投。它到底是什么?一句话:DuckDB 是一个进程内(in-process)的分析型数据库——如果说 SQLite 是「嵌入应用程序的 PostgreSQL」,那 DuckDB 就是「嵌入应用程序的数据仓库」。
OLTP 与 OLAP 是两回事
数据库世界有一条分界线。一侧是联机事务处理(OLTP):下单、扣库存、转账,特点是每次读写一两行,要求低延迟和高并发,PostgreSQL、MySQL 都在这侧。另一侧是联机分析处理(OLAP):算全年的销售报表、给一亿行日志做聚合,特点是每次扫大量行、只碰少数几列。行存数据库做分析查询会把整张表从磁盘搬进内存,哪怕你只要 3 列——数据量一大就崩。DuckDB 从第一行代码起就站在 OLAP 这侧。
图1:分析查询「SELECT 3 列做聚合」在两种存储布局下的 IO 差异
三件套:列存、向量化、进程内
列存解决「读多少」,向量化执行(vectorized execution)解决「怎么算」。DuckDB 不逐行解释执行,而是把一列数据切成几千行一批的向量,一个算子一次处理一批——函数调用、分支判断的开销被摊薄,循环紧凑到 CPU 分支预测和缓存都舒服。第三件是进程内嵌入式:没有独立的服务进程,数据库就是一个库文件,`pip install duckdb` 之后直接在 Python 里 `duckdb.sql("...")`,没有网络往返、没有连接池、没有配置文件,数据库文件就是一个 `.duckdb` 单文件,拷走就能用。
图2:从文件到结果的完整链路,跑在分析与应用同一个进程里
对数据分析师来说,最直接的体感是:不用先把 CSV 导进数据库。DuckDB 可以对磁盘上的 CSV、Parquet、JSON 文件直接发 SQL,装上 httpfs 扩展还能查询 S3 桶里的远端文件;在 Python 里,一个 pandas DataFrame 也能当表查。SQL 该有的都有——窗口函数、CTE、各种 JOIN、完整的事务(ACID)。团队后来又推出了 DuckLake:一种 lakehouse 表格式,用 SQL 管理躺在 Parquet 数据湖里的表。今天的新闻里,DuckDB、DuckLake、Quack 都继续以 MIT 许可开源,由 DuckDB Foundation 托管——云巨头买走了团队,但没买走社区。
本节你将能
- 说清 OLTP 与 OLAP 的分界,以及行存/列存各自的适用面;
- 解释列存为何让分析查询少读一个数量级的数据;
- 用 DuckDB 直接对 CSV/Parquet 发 SQL,并理解向量化执行为什么快;
- 判断自己的场景该选嵌入式 DuckDB 还是 client/server 数据仓库。