DuckDB 周报 #10:v1.5.6 发布,v2.0 提速 6 倍
9 月 28 日,DuckDB 发布了 v1.5.6,这是 1.5(Variegata)线的第六个补丁版本,修了一批正确性问题,也带了安全补丁。手里有 1.5.x 项目的,这周值得升一下。
同一天的官方博客还给了个 v2.0 预览数字:Windows 上跑 TPC-H SF300,总时间从 822 秒降到 129 秒。数字是官方自己测的,测试条件写得清楚,但逐条查询看并不全是碾压。一句话结论:v2.0 的提速是真的,但这周真正该动手的事,是把生产环境升到 1.5.6。
● ● ●
生态变化
版本面:稳定版从 v1.5.5 升到 v1.5.6(9 月 28 日)。v2.0-alpha(代号 Cyanoptera)继续按发布日历朝 10 月的正式版推进。
v1.5.6 值得留意的修复,按官方公告的分类挑重点:
- 正确性
:LIMIT 下推穿过带 OFFSET 的 volatile 投影会算错(#24240);UNNEST 下推修复(#24119);Top-N 窗口消除在 ORDER BY 无列引用时会丢 NULL(#24399);ICU 的 strptime 会在行间泄漏时区状态(#24438),用 ICU 解析带时区字符串的注意这条;Parquet 读写 TIME_NS 修复(#25728);VARIANT shredding 对 REQUIRED 字段的修复(#26162) - 崩溃类
:Top-N 遇到 LIMIT 0 直接崩(#25103);url_decode 配合 TRY() 在字典编码列上段错误(#24427) - C API
:符号版本统一,全部 v1 API 进入稳定承诺(#24362),写扩展的人会关心 新增 enable_optimistic_write设置(#26102)
v2.0 的 Windows 数字:官方在一台 Windows 11 25H2、128 GB 内存、12 核 AMD Ryzen AI 300(24 线程)的笔记本上对比了 v1.5.6 和 v2.0.0-dev(alpha43586),TPC-H SF300,每条查询跑两遍取热跑时间。总时间 822 秒对 129 秒,超过 6 倍。但明细里 Q1 是 17.6 秒变 20.0 秒、Q2 是 1.1 秒变 2.0 秒,反而慢了。所以「快 6 倍」是 22 条查询的总分,不代表每条都快。另外 v2.0-dev 的 Windows 客户端现在有扩展可装了;之前从 tarball 装 CLI 可能撞上「扩展还没传到 S3」的空窗期,官方加了个 alpha 版本重定向来堵这个洞。
社区扩展:10 月 2 日到 3 日合并了一波更新,主流是为 v1.5.6 重建——webbed 2.9.3、otlp、oracle_scanner 0.3.1、finance 0.2.22、zim 0.9.3、STAC 0.3.0、firebird 1.1.0、Onager 都在其中。排队等审的还有 read_lines、func_apply、duck_hunt 这批 v2.0(cyanoptera)的 family-C 移植。两个结构变化:新扩展 dc dual-cognition 合并进库;harbor 被移除,作者注明它不再是 DuckDB 扩展了。
● ● ●
用英语写 WHERE 条件的扩展,十天就出来了
9 月 29 日官方博客发了篇《Jev and DuckDB: Plain-English Conditions in SQL》,讲一种新玩法。
背景是 9 月 15 日 TypeSafe AI 发布的 Jev 模型。它不返回文本,返回带概率的类型化答案:是/否判断(对应 SQL 的 BOOLEAN)、单选分类(对应 ENUM,最多 255 个选项)、按标准打分(对应可排序的序数)。官方口径延迟 70 到 500 毫秒,输入 0.042 美元每百万 token,输出免费。
对 DuckDB 意味着什么:十天内社区做出了好几个扩展,把英语条件直接塞进 SQL。第一个 SQL 集成是 Postgres 上的 pg-jev(9 月 17 日),作者四天后被 Actian 收编。DuckDB 这边已经有进社区扩展仓库的 jev,用法:
INSTALL jev FROM community;
LOAD jev;
SET jev_api_key = '...';
SELECT subject, jev_prob(tickets, 'the customer is angry') AS p
FROM tickets
ORDER BY p DESC;
5 万行工单里找愤怒客户,不用先标注数据训练分类器,也不用逐行调 chat 模型再解析文本。有人演示过约 1000 行 CSV 十秒左右出结果。TypeSafe 宣传里的「190 倍提速」出自它自家 workflow 评测,口径是厂商自报,参考就好。
两个提醒:一,这类扩展会把行内容发给第三方 API,敏感数据别用;二,除了 jev 社区扩展(支持 v1.5.5 和 v1.5.6),其他几个端口比如 duckdb-jev 还没进仓库,要自己编译加载。
● ● ●
字符串聚合慢?官方把老手艺写进了性能指南
10 月 2 日的博客《Faster String Aggregations with Dimension Tables》,讲数仓老套路的新用法。
问题:分析负载里全是重复长字符串——站名、产品名、user agent。DuckDB 的字符串是 16 字节结构,超过 12 字节就得跟着指针读全文。GROUP BY 一个字符串列时,每一行都要哈希、比较整个字符串。官方的例子里,荷兰火车停靠数据 380,959 行,站名只有 537 个:Amsterdam Centraal 一个 18 字节的站名重复存了 7,591 次。
解法就是星型模式:把字符串抽进一张小维度表,每个值给一个排好序的窄整数键,聚合在键上做,最后再把字符串 join 回来。键域够窄时,优化器会直接走完美哈希聚合——用键值当数组下标,连哈希都省了。这个模式来自 DuckDB 团队的 Richard Wesley,现在写进了 Performance Guide 的 schema 一节。你的负载里如果有高基数字符串 GROUP BY 在吃内存,值得照着改一遍。
● ● ●
值得一提
主仓这周合了几个有分量的:
- checkpoint 不再堵写入
(#25988,10 月 1 日合并)。以前 checkpoint 写某张表时持排他锁,INSERT 和 DELETE 全在等,还会牵出死锁。现在 checkpoint 会把期间提交的写入转写进去,写入与检查点并行,顺手消掉了一类死锁。重度写入负载会直接有感。 - 无分区窗口函数改走 cross join
(#26141)。窗口自 join 没有分区时生成 cross join,PR 自带基准 3.000 秒降到 0.251 秒,12 倍。 - TPC-H/TPC-DS 查询支持 scale factor
(#26103)。 tpch_queries(sf=100)直接返回对应数据量的官方参数化查询,跑基准方便多了。 - 上周介绍过的 Window Monotonic Pushdown 出了正确性修复
(#26395)。 PARTITION BY -x这类递减表达式会生成错误的辅助过滤器、丢匹配行。修复后的策略是只对递增函数生成辅助过滤——直接反转不等号对浮点 NaN 不成立。上周刚合并的优化这周就补了坑,追新优化的风险和节奏可以体会一下。
当前最新稳定版:v1.5.6(2026-09-28 发布)。v2.0 按发布日历排在 10 月。
你现在站在哪:已经升 1.5.6 了、在等 v2.0 正式版、还是正准备照官方指南把字符串聚合改一轮?评论区说一声。
● ● ●
参考来源
- 01
https://duckdb.org/2026/09/28/announcing-duckdb-156.html - 02
https://duckdb.org/2026/09/29/jev.html - 03
https://duckdb.org/2026/10/02/dimension-tables.html - 04
https://github.com/duckdb/duckdb/releases/tag/v1.5.6 - 05
https://github.com/duckdb/duckdb/pull/25988 - 06
https://github.com/duckdb/duckdb/pull/26141 - 07
https://github.com/duckdb/duckdb/pull/26103 - 08
https://github.com/duckdb/duckdb/pull/26395 - 09
https://duckdb.org/community_extensions/extensions/jev - 10
https://duckdb.org/release_calendar.html