开源列式关系数据库管理系统(RDBMS)DuckDB 发布了 v2.0 预览版,代号 "Cyanoptera",预计今年秋季正式发布。这是一次大版本升级,将带来以下亮点特性:
- 全新的 SQL 解析器
- 新的默认存储格式
- 重写的 C API
- 以及少量精心挑选的破坏性变更
自 3 月发布的 v1.5 以来,v2.0 积累了超过 10,000 个 commit。

最引人注目的变化是 Quack 协议的稳定化。任何 DuckDB 进程都可以通过网络提供数据库服务,其他 DuckDB 实例通过 CONNECT 语句附加并路由查询。这意味着 DuckDB 的 MVCC 和事务隔离终于可以在多租户、长时间运行的部署中发挥完整作用。配合 PostgreSQL 和 MySQL 的远程下推优化器,CONNECT 不只是连接 DuckDB —— 它能把 SQL 直接发到其他数据库执行。
异步 I/O 是另一个重大升级。以前 DuckDB 从 S3 读取数据是并行的,但同步。v2.0 将 I/O 层与查询处理解耦,远程存储上的查询速度大幅提升。Parquet、CSV、DuckDB 自有格式将逐步支持异步读写,还新增了 MMAP 和 DIRECT_IO 模式。
性能提升数字也很漂亮。一个百万边的递归 CTE 图查询,v1.5.4 需要 4.90 秒,v2.0 预览版只用了 0.12 秒 —— 快了约 40 倍。Windows CLI 上多线程结果物化速度提升了约 2.2 倍。聚合操作可以溢出到磁盘,不再因内存不够而报错。
SQL 能力也有显著扩展。NEAREST joins 支持 top-k 相似度搜索作为 join 子句;DML 可以写在 CTE 里,把 INSERT/UPDATE/DELETE 变成 pipeline 步骤;触发器全面支持 BEFORE/AFTER、行级/语句级、过渡表;VARIANT 类型从半结构化数据中自动检测共同结构并"粉碎"压缩,读取速度更快。
存储格式升级到 v2.0.0,最大的变化是 buffer-managed ART 索引 —— 索引不再常驻内存,大表秒开。ICU 库被完全移除,时区、日历和排序规则现在由扩展自行实现,IANA 时区数据压缩到约 45KB,时区转换速度快了 2.2 倍。
SQL 解析器不再基于 PostgreSQL 解析器,而是用自研的 PEG 解析器替代。扩展可以挂接语法本身,公开新的 SQL 语法。首个方言兼容模式是 Spark。更好的错误消息,精确的源码位置。
自托管扩展仓库是另一个有趣的功能。组织可以把自己的扩展签上名,托管在自己的服务器上,DuckDB 在创建仓库时获取并固定公钥。这对企业用户来说,意味着不需要把所有内部扩展都提交到官方仓库。
社区用户们分享了不少实际部署场景:WASM 浏览器端分析、ETL 管道、多租户数据服务。他们对 DuckDB 从单机分析引擎向云数仓方向演进(DuckLake、Quack)表现出浓厚兴趣,同时也关注它和 ClickHouse 的竞争关系以及增量物化视图等缺失功能。