DuckDB 1.5 介绍与选型指南
介绍 DuckDB v1.5.6 嵌入式分析型数据库:进程内架构、列存向量化执行、扩展体系、文件直查与多语言接入,并对比 SQLite、Polars、ClickHouse 给出选型建议
DuckDB 1.5 介绍与选型指南
一、信息基准
本文为 DuckDB 的认知篇(软件介绍与选型指南),全部信息基于官方渠道溯源,查询日期为 2026-10-18,未做任何本地安装与实测。
| 信息项 | 内容 |
|---|---|
| 查询日期 | 2026-10-18 |
| 最新稳定版 | v1.5.6(2026-09-28 发布,Bugfix Release;1.5.x 线代号 Variegata) |
| 上一稳定版 | v1.5.5(2026-07-22 发布,Bugfix Release) |
| 开源许可 | MIT(版权方 Stichting DuckDB Foundation) |
| 官网 | https://duckdb.org |
| 源码仓库 | https://github.com/duckdb/duckdb |
| 版本依据 | GitHub releases.atom 订阅源实查(v1.5.6、v1.5.5 均为官方发布记录) |
官方来源清单:
| 来源 | 链接 | 用途 |
|---|---|---|
| GitHub releases.atom | https://github.com/duckdb/duckdb/releases.atom | 版本号与发布日期溯源 |
| 官网文档 | https://duckdb.org/docs/ | 功能、安装与快速上手口径 |
| 许可文件 | https://github.com/duckdb/duckdb/blob/main/LICENSE | MIT 许可原文 |
| 官方 GitHub 主页 | https://github.com/duckdb/duckdb | stars 数据(2026-10-18 实查 42.2k) |
二、软件概述
本文介绍的是 DuckDB v1.5.6(2026-09-28 发布)。DuckDB 是一款进程内嵌入式分析型数据库(in-process OLAP database),由荷兰 CWI 研究所的数据系统研究团队孵化,现由 Stichting DuckDB Foundation(荷兰基金会)维护,主仓库以 MIT 许可开源。
DuckDB 的定位与 SQLite 类似——都是"无需独立服务端、随应用进程启动"的嵌入式数据库;区别在于 DuckDB 面向分析型负载(OLAP):采用列式存储与向量化执行引擎,擅长对本地文件(CSV、Parquet、JSON)与大规模数据集做聚合、扫描和复杂查询。它既可以通过命令行工具直接执行 SQL,也可以作为 Python、R、Java、Node.js 等语言运行环境中的"内存分析库"嵌入使用。
截至查询日,DuckDB GitHub stars 为 42.2k(官方主页实查),是数据工程与数据科学领域活跃度最高的开源项目之一。版本节奏上,1.5.x 线自 v1.5.5(2026-07-22)至 v1.5.6(2026-09-28)持续以月度级 Bugfix Release 推进,官方同时维护旧版本的修复分支。
三、核心架构
3.1 进程内嵌入与单文件存储
DuckDB 没有守护进程,也不需要客户端/服务端网络通信:它以库的形式链接进宿主进程,直接在进程内完成解析、执行与存储。数据库落盘为单个文件(默认 .duckdb 后缀),由其自研的存储格式管理,支持事务(ACID)。这一设计带来两个直接好处:零部署成本(拷贝文件即迁移),以及与宿主应用同生命周期(无额外运维对象)。
3.2 列式存储与向量化执行
与面向行存 OLTP 的 SQLite 不同,DuckDB 采用列式布局与向量化(vectorized)执行引擎:数据按列组织,算子以批次(向量)为单位处理,CPU 缓存友好并便于利用现代处理器的并行能力。官方文档将其概括为"为分析查询而生"的执行模型,适合聚合、扫描、多表 join 等典型 OLAP 操作,不适合高频单行点写的交易型负载。
3.3 扩展体系
DuckDB 通过扩展(extensions)按需加载能力,常见官方扩展包括:
httpfs:直接读写 HTTP 与对象存储(如 S3 兼容服务)上的远程文件;parquet:Parquet 文件的读写支持;json:JSON 的解析与查询;spatial:地理空间类型与函数;fts:全文检索。
扩展可在运行时通过 SQL(INSTALL/LOAD 语句)安装加载,官方提供静态分发与自动加载机制。
3.4 多语言接入与客户端 API
官方维护的客户端覆盖:Python、R、Java(JDBC)、Node.js、Rust、C/C++、Go、ODBC 驱动以及命令行工具 duckdb。Python API 支持与 Pandas、Apache Arrow、Polars 等数据结构零拷贝互操作(官方文档口径),这是其在数据科学工作流中普及的重要原因。
四、功能特性
4.1 SQL 能力
DuckDB 提供完整的 SQL 支持,方言接近 PostgreSQL:窗口函数、公共表表达式(CTE)、GROUP BY 分组集、UNPIVOT/PIVOT、ASOF JOIN、SAMPLE 采样等分析型语法均可用(官方 SQL 参考文档口径)。对熟悉 PostgreSQL 的使用者而言迁移成本很低。
4.2 直接查询文件
无需先导入即可查询本地或远程数据文件,是 DuckDB 最具辨识度的能力:
read_csv_auto():自动推断结构的 CSV 读取;read_parquet():查询 Parquet 文件(可配合httpfs直接查询对象存储地址);read_json():查询 JSON/NDJSON。
配合 httpfs 扩展,官方文档演示了直接对 S3 兼容端点上的 Parquet 执行 SQL 的用法,适合"存算分离、临时分析"的场景。
4.3 与数据科学生态互操作
Python 端可将查询结果直接转为 Pandas DataFrame、Polars DataFrame 或 Arrow 表,也可反向把 DataFrame 注册为可查询的视图(duckdb.sql() 对 DataFrame 直接写表名查询),官方文档称之为"零数据拷贝"的数据交换。
4.4 并行与持久化
DuckDB 支持多线程并行执行(threads 参数可调)与磁盘溢写(内存不足时使用临时目录),单文件数据库支持并发读与单写者模型,官方文档明确了"多读单写"的并发边界。
五、快速上手
以下最小示例均引自官方文档(安装页与入门指南),本文未做本地实测。
安装(官方安装页 https://duckdb.org/docs/installation/ ):
# 命令行工具与嵌入式库均可按官方安装页提供的包管理器/直链安装
pip install duckdb
命令行最小示例(官方文档入门页):
-- 启动 duckdb 后直接执行
SELECT 42;
SELECT count(*) FROM read_csv_auto('data.csv');
SELECT * FROM read_parquet('input.parquet') LIMIT 5;
Python 最小示例(官方 README 标准示例):
import duckdb
duckdb.sql("SELECT 42").show()
官方来源:https://duckdb.org/docs/installation/ 、https://github.com/duckdb/duckdb(README)、https://duckdb.org/docs/guides/
六、适用场景与限制
6.1 适用场景
- 本地与单机数据分析:数据科学、报表原型、Ad-hoc 查询,直接分析 CSV/Parquet/JSON 文件;
- 嵌入式分析:把分析能力内嵌进桌面应用、后端服务或 ETL 脚本,无需独立数据库服务;
- 数据湖文件查询:配合
httpfs直接对对象存储上的 Parquet 文件执行 SQL,替代临时搭建的查询服务; - 中小规模数据仓库原型:列存 + 向量化 + SQL,用于在正式数仓方案落地前验证数据模型。
6.2 限制与注意点
- 并发模型为多读单写:不适合多实例并发写入同一个数据库文件的场景(官方文档口径),高并发写入应使用服务端数据库;
- OLTP 负载不适合:高频小事务、行级点查点写不是其设计目标;
- 无内建分布式:单机定位,跨节点扩展需借助外部方案(如把 DuckDB 作为 Parquet 查询引擎组合使用);
- 生态以分析场景为主:如需全文检索、图查询等非 OLAP 能力,依赖扩展的成熟度,选型前应逐项确认。
七、同类选型对比
对比对象选取本地分析/嵌入式与轻量 OLAP 赛道中活跃度最高的三个开源项目:SQLite、Polars、ClickHouse。stars 与最近发版均为 2026-10-18 联网实查,来源标注在表后。
| 维度 | DuckDB | SQLite | Polars | ClickHouse |
|---|---|---|---|---|
| 开源许可 | MIT | 公有领域(Public Domain) | MIT | Apache-2.0 |
| GitHub stars | 42.2k | 官方未公布(官方源码托管于 Fossil,GitHub 仅为只读同步副本) | 40.1k | 50.5k |
| 最近发版 | v1.5.6(2026-09-28) | 按官网源码发布(无 GitHub 官方 release 页) | Python Polars 2.0.0(2026-10-06) | v26.7.34.3-stable(2026-10-18) |
| 版本节奏 | minor 约季度推进、bugfix 月度级(releases 实查) | 官方 Fossil 仓库按周期合并发布 | 迭代活跃,大版本快速演进 | 滚动 stable + LTS 双轨,发版频繁 |
| 存储模型 | 列存、单文件、进程内 | 行存、单文件、进程内 | DataFrame 库(非数据库) | 列存、服务端分布式 |
| 兼容矩阵 | Linux/macOS/Windows,x86_64/ARM64;Python/R/Java/Node.js/Rust/Go/C/C++/ODBC/CLI | 几乎所有平台与语言(C API 为核心) | Rust 核心 + Python/Node.js/R 等绑定 | Linux/macOS/Windows 服务端;HTTP/原生协议客户端 |
数据来源:GitHub releases.atom 与仓库主页(2026-10-18 实查);SQLite stars 因官方不使用 GitHub 而如实标注"官方未公布";ClickHouse、Polars 版本取自各自官方 release 记录。
选型建议:需要"零运维、随进程启动"的单机分析数据库首选 DuckDB;面向交易型单机存储选 SQLite;数据管道中的 DataFrame 计算选 Polars;多用户、大规模、需要分布式与高并发的服务端分析选 ClickHouse。