DuckDB:跑在你笔记本里的数据仓库
> 来源: https://duckdb.org/ | GitHub
> 日期: 2026-04-03
> 类型: 数据库 / 分析引擎 / 开发者工具
> 最新版本: v1.5.1 (2026-03-23)
🎯 一句话版本
DuckDB 是"数据分析界的 SQLite"——一个嵌入在你程序里的超快 SQL 数据库,不需要装服务器,一行命令安装,直接查 CSV/Parquet/JSON 文件,10GB 数据秒出结果。
为什么 DuckDB 重要?
它解决了什么问题?
在 DuckDB 之前,如果你想对一堆 CSV 文件跑 SQL 分析,你的选择是:
1. 导入 PostgreSQL/MySQL → 安装数据库、建表、导入数据、写 SQL、跑查询(半小时起步)
2. 用 Pandas → 写 Python 代码加载数据、写复杂的 DataFrame 操作(慢,吃内存)
3. 上 BigQuery/Snowflake → 注册账号、配置凭证、上传数据、按量付费
DuckDB 的回答是:
pip install duckdb
import duckdb
duckdb.sql("SELECT * FROM 'sales.csv' WHERE revenue > 10000").show()
完了。 不需要安装数据库服务器,不需要建表,不需要导入数据。DuckDB 直接读文件,在进程内跑 SQL,返回结果。
起源:荷兰数学中心的学术项目
DuckDB 由 Mark Raasveldt 和 Hannes Mühleisen 在荷兰 Centrum Wiskunde & Informatica (CWI) 开发。CWI 是 Python 的诞生地,也是 MonetDB(列式数据库鼻祖)的发源地。
时间线:
| 年份 | 事件 |
|---|---|
| 2018 | 项目启动(CWI 内部) |
| 2019 | 首个开源版本发布,SIGMOD 2019 Demo Paper |
| 2021 | 成立 DuckDB Labs(商业公司),月下载量突破百万 |
| 2023 | MotherDuck(云端 DuckDB)融资 $1 亿,估值 $4 亿 |
| 2024 | v1.0.0 发布(代号 SnowDuck),生产级稳定版 |
| 2025 | v1.3 重写 Parquet 引擎,v1.4 成为 LTS |
| 2026 | v1.5 发布(VARIANT 类型、新 CLI、DuckLake),月下载 600 万+,v2.0 计划中 |
DuckDB Labs 拒绝了 VC 融资,创始人说:"投资会逼我们走向商业化,我们更想让 DuckDB 对所有人开放。" 这在 2026 年的 AI/Data 赛道极为罕见。
技术架构
核心设计哲学
DuckDB 的设计哲学可以用一句话概括:"SQLite 做 OLTP,DuckDB 做 OLAP"。
┌─────────────────────────────────────┐
│ 你的应用程序 / Python │
│ │
│ ┌───────────────────────────────┐ │
│ │ DuckDB 引擎 │ │
│ │ │ │
│ │ SQL 解析器 (pg_query) │ │
│ │ ↓ │ │
│ │ 查询优化器 (Cost-based) │ │
│ │ ↓ │ │
│ │ 向量化执行引擎 │ │
│ │ (MonetDB/X100 inspired) │ │
│ │ ↓ │ │
│ │ 列式存储 + 压缩 │ │
│ └───────────────────────────────┘ │
│ │
│ 直接读取: │
│ CSV / Parquet / JSON / S3 / HTTP │
└─────────────────────────────────────┘
关键技术特性
1. 嵌入式运行(In-Process)
DuckDB 不是一个独立的服务器进程。它作为一个库嵌入到宿主程序中运行,就像 SQLite 一样。这意味着:
- 零网络开销(数据不走 TCP/IP)
- 零部署复杂度(没有守护进程)
- 可以直接操作宿主程序的内存(比如直接查 Pandas DataFrame,零拷贝)
2. 列式向量化执行
传统数据库(PostgreSQL、MySQL)逐行处理数据。DuckDB 使用列式向量化执行:
- 一次处理一批值("向量"),而不是一行
- 利用 CPU SIMD 指令加速
- 内存连续访问,对 CPU 缓存友好
- 对聚合、扫描等 OLAP 操作快 10-100 倍
3. 零配置文件读取
-- 直接查 CSV(自动检测格式、列名、类型)
SELECT * FROM 'data.csv';
-- 直接查 Parquet(支持通配符)
SELECT * FROM 'logs/*.parquet';
-- 直接查远程文件
SELECT * FROM 'https://example.com/data.csv';
-- 直接查 S3
SELECT * FROM 's3://my-bucket/data.parquet';
DuckDB 自动推断文件格式、列名、数据类型,不需要预先定义 schema。
4. 无依赖编译
DuckDB 的完整源码可以编译成两个文件(一个 .h 头文件 + 一个 .cpp 实现文件),称为"amalgamation"。只需要 C++17 编译器,没有任何外部依赖。这使得它可以嵌入到几乎任何环境。
扩展系统
DuckDB 通过插件系统支持大量功能扩展:
| 扩展 | 功能 |
|---|---|
| httpfs | HTTP/HTTPS/S3 远程文件读取 |
| spatial | 地理空间函数(ST_* 系列) |
| iceberg | Apache Iceberg 表读写 |
| delta | Delta Lake 表读写 |
| ducklake | DuckDB 自研 Lakehouse 格式 |
| postgres | 直连 PostgreSQL 查询 |
| mysql | 直连 MySQL 查询 |
| sqlite | 读写 SQLite 数据库 |
| json | JSON 数据处理 |
| parquet | Parquet 读写(核心扩展) |
v1.5.0 "Variegata"(2026-03-09)亮点
全新 CLI
DuckDB 1.5 重写了命令行客户端:
- 语法高亮 + 暗色/亮色主题
- 动态提示符 显示当前数据库和 schema
- 分页器(大结果集自动分页)
_引用上次结果(不用重跑长查询).tables命令 可视化显示所有表和列
VARIANT 类型
借鉴 Snowflake 的半结构化数据类型,同一列可以存不同类型:
CREATE TABLE events (id INTEGER, data VARIANT);
INSERT INTO events VALUES
(1, 42::VARIANT),
(2, 'hello'::VARIANT),
(3, [1, 2, 3]::VARIANT),
(4, {'name': 'Alice', 'age': 30}::VARIANT);
每行自带类型信息,比 JSON 更高效(二进制存储 vs 文本存储)。
DuckLake
DuckDB 自研的 Lakehouse 格式,元数据存在 SQL 数据库中(而非 JSON 文件),支持:
- ACID 事务
- 时间旅行(Time Travel)
- Schema 演进
- 多表事务
- 数据内联(Streaming 友好)
v1.0 计划 2026 年发布。
生态与社区
客户端 API
Python、Go、Java、Node.js、C、C++、R、Rust、Julia、Swift、ODBC、WebAssembly — 几乎覆盖所有主流语言。
AI Agent 集成
DuckDB 官方发布了 duckdb-skills — Claude Code 的官方插件:
attach-db:挂载数据库,探索 schemaquery:SQL 查询或自然语言提问read-file:读取任意数据文件(CSV/Parquet/JSON/Excel/S3)duckdb-docs:全文搜索文档read-memories:搜索历史会话记录
这意味着 DuckDB 官方已经在为 AI Agent 时代做准备。
用户
Facebook、Google、Airbnb,以及无数的数据团队、独立开发者、研究人员。
商业生态
- DuckDB Labs(创始人公司):咨询 + 支持,不接受 VC
- MotherDuck:云端 DuckDB,$1 亿融资,A16Z 领投
- DuckDB Foundation(非营利):保障 MIT 协议永久开放
性能:DuckDB vs 其他方案
单机分析场景(DuckDB 的主场)
| 场景 | DuckDB | PostgreSQL | Pandas | ClickHouse |
|---|---|---|---|---|
| 1GB CSV 聚合 | ~1s | ~10s | ~5s | ~1s |
| 10GB Parquet JOIN | ~8s | ~60s+ | OOM | ~5s |
| 100GB 扫描 | ~45s | 不适用 | 不可能 | ~20s |
| 安装时间 | 3 秒 | 15 分钟 | 3 秒 | 10 分钟 |
| 并发查询 | ⚠️ 单写多读 | ✅ 优秀 | ❌ | ✅ 优秀 |
| 分布式 | ❌ 单机 | ❌ 单机 | ❌ 单机 | ✅ 集群 |
DuckDB 的甜蜜区:单机、10MB-100GB 数据、分析查询、嵌入式场景。
DuckDB 不适合:高并发 OLTP、分布式大集群、TB 级实时数据。
关键 benchmark 发现
- DuckDB vs ClickHouse(Exasol 2025 测试):并发性能几乎相同(DuckDB 1.41x 降级 vs ClickHouse 1.39x)
- 小规模数据 DuckDB 更快:25GB 以下 DuckDB 通常胜出
- 大规模分布式 ClickHouse 更强:100GB+ 多节点场景 ClickHouse 占优
与我们的关联
为什么 DuckDB 对我们有用?
1. Agent 数据分析基础设施
ub2 服务器(i9-13900K, 64GB RAM)+ DuckDB 可以让 AI Agent 直接对本地数据跑 SQL:
- 把研究报告、抓取数据结构化为 Parquet 文件
- Agent 收到分析请求 → 生成 SQL → DuckDB 执行 → 返回结果
- 比 Modolap 的 DataFusion 方案更成熟、更简单
2. DuckDB Skills 参考设计
官方的 Claude Code Skills 提供了现成的 Agent 集成模板:
- 文件读取 + SQL 查询 + 文档搜索的组合
- 状态文件 (state.sql) 实现跨会话持久化
- 我们可以移植到 OpenClaw Skill 体系
3. DuckLake 方向值得关注
DuckDB 在造自己的 Lakehouse 格式(DuckLake),如果 v1.0 稳定,我们可以用它做:
- 研究数据的版本管理(时间旅行)
- 多源数据的统一查询
- ACID 事务保证
具体可以做什么?
# Step 1: 在 ub2 上安装
pip install duckdb
# Step 2: 准备数据目录
mkdir -p /mnt/sda/data
# Step 3: 让 Agent 直接查询
python3 -c "
import duckdb
result = duckdb.sql(\"\"\"
SELECT title, score, time
FROM read_parquet('/mnt/sda/data/hn_posts.parquet')
WHERE title ILIKE '%ai agent%'
ORDER BY score DESC
LIMIT 20
\"\"\")
print(result.show())
"
评分
| 维度 | 分数 | 说明 |
|---|---|---|
| 技术创新 | 9/10 | 列式向量化 + 嵌入式 + 零配置,开创新品类 |
| 工程质量 | 10/10 | 百万级测试用例,7年稳定迭代,学术严谨+工程扎实 |
| 实用性 | 9/10 | pip install 到跑查询 3 秒,人人可用 |
| 生态成熟度 | 9/10 | 15+ 语言 API,30+ 社区扩展,官方 AI Skill |
| 商业可持续性 | 8/10 | DuckDB Labs 不接 VC 是双刃剑,但基金会保障开源 |
| 与我们的相关性 | 8/10 | Agent OLAP 完美选择,但我们目前数据量有限 |
| **综合** | **9.0/10** |
关键链接
- 官网:https://duckdb.org/
- GitHub:https://github.com/duckdb/duckdb(30,000+ stars)
- DuckDB Skills (Claude Code):https://github.com/duckdb/duckdb-skills
- v1.5.0 发布公告:https://duckdb.org/2026/03/09/announcing-duckdb-150
- DuckLake:https://ducklake.select/
- MotherDuck(云端 DuckDB):https://motherduck.com/
- Why DuckDB:https://duckdb.org/why_duckdb
- Wikipedia:https://en.wikipedia.org/wiki/DuckDB
> 一句话总结:DuckDB 是 2026 年数据分析最重要的基础设施之一。它用 SQLite 的简洁哲学解决了 OLAP 分析的复杂性问题,从学术项目做到 600 万月下载,而创始人拒绝 VC 保持开源。如果你需要给 AI Agent 加数据分析能力,DuckDB 是目前最优解。