文章摘要
DuckDB v2.0将于今年秋季发布,主要新特性包括支持服务器模式、触发器、VARIANT类型、异步I/O、新SQL解析器、新存储格式等。这是重大版本更新,包含超过一万次提交,标志着DuckDB从湖仓一体转向服务器化发展。
文章总结
好的,这是根据您的要求,对原文进行中文重述和精简后的版本:
DuckDB v2.0 预览:主要新特性一览
DuckDB v2.0(代号“Cyanoptera”)将于今年秋季发布。这是一个重大版本更新,包含了新的SQL解析器、新的默认存储格式、重构的C语言API,以及一些精心挑选的破坏性变更。更重要的是,它带来了大量新功能,标志着DuckDB从进程内数据库向服务器模式的转变。
以下是v2.0的十大亮点功能:
1. DuckDB 作为服务器:Quack 协议与 CONNECT 语句
DuckDB v2.0 正式推出了客户端/服务器模式。通过 quack 扩展,任何 DuckDB 进程都可以通过网络提供数据库服务。其他 DuckDB 实例可以使用新的 CONNECT 语句连接到服务器并路由查询。CONNECT 语句不仅限于 Quack 协议,也支持直接连接到 PostgreSQL 和 MySQL 等远程数据库,并将 SQL 下推至这些数据库执行。
2. VARIANT 类型成为一等公民
VARIANT 类型在 v1.5 中引入,可以看作是“增强版 JSON”。它能自动检测半结构化数据中的共同结构并进行“切碎”存储,从而实现高效压缩和快速查询。v2.0 完善了这一功能,实现了从存储到查询的端到端切碎执行,并新增了一系列 variant_* 函数。未来计划用 VARIANT 来支持现有的 JSON 类型。
3. 触发器
v2.0 完整支持了触发器功能,包括 BEFORE 和 AFTER 触发器、FOR EACH ROW 和 FOR EACH STATEMENT 模式、过渡表(REFERENCING OLD/NEW TABLE)等。经典用例是创建审计表,记录数据变更历史。
4. SQL 方言增强
- NEAREST 连接:支持近似最近邻搜索,适用于向量和嵌入工作负载。
- CTE 中的 DML:允许在公用表表达式(CTE)中使用 INSERT、UPDATE、DELETE 和 COPY 语句。
- 嵌套模式:支持在模式(Schema)内创建子模式。
- 变量语法:使用 $x 代替冗长的 getvariable(...) 函数。
- JSON 变异函数:新增 json_set、json_insert 等函数,用于原地修改 JSON 文档。
- 带 USING KEY 聚合的递归 CTE:支持在纯 SQL 中实现迭代算法。
5. 异步 I/O v2.0 在整个引擎中引入了异步 I/O,使得 I/O 层可以与查询处理层独立扩展。这极大地提高了对网络存储(如 S3)的并行读取能力,显著加快了远程数据查询速度。该功能已支持 Parquet、CSV 和 DuckDB 自身文件格式。
6. 全面提速的查询性能 - 递归 CTE 引擎被重写,性能提升巨大(例如,在百万级边图中进行单源可达性查询,速度提升约 40 倍)。 - 部分聚合被下推到连接操作之下,冗余聚合被重用。 - 聚合操作在内存不足时可溢出到磁盘。 - 行组修剪(Zone Maps 和 Bloom Filters)功能大幅扩展,现在能跳过更多类型的数据(如结构体、列表、UUID)和函数谓词。 - 查询规划器现在能感知分区,从而在查询分区数据集时跳过大部分数据。
7. 存储格式 v2.0
- ART 索引不再常驻内存,而是由缓冲区管理,使得大型索引表可以瞬间打开,索引按需分页加载。
- 列元数据采用惰性加载,加快了宽表的打开速度。
- DICT_FSST 字符串压缩方法默认启用。
- 删除操作存储更紧凑,存储层对读取进行更强的损坏校验。
8. 全新的 SQL 解析器
v2.0 使用自研的、基于 PEG 的现代可扩展解析器,取代了源自 PostgreSQL 的旧解析器。新解析器允许扩展程序挂钩到语法本身,带来更好的错误信息,并支持首个方言兼容模式(SET dialect_compatibility_mode = 'spark')。
9. 移除 ICU 库
v2.0 移除了 ICU 库,由 icu 扩展自身实现时区、日历和排序规则。新的实现直接从 IANA 数据库构建时区数据,压缩后仅约 45 kB,不仅体积更小,性能也更快(例如,时区转换和排序操作速度提升超过 2 倍)。
10. 稳定的扩展 C API 与自定义仓库
v2.0 扩展了稳定的 C API,使得扩展程序可以“一次编写,永久运行”,无需为每个 DuckDB 版本重新编译。C API 现在由一个声明式的、带版本号的规范生成,确保了 API 和 ABI 的稳定性。此外,用户可以注册自己的扩展仓库,托管和签名自己的扩展,并通过 INSTALL 命令像安装官方扩展一样安装它们。
总结 以上只是 v2.0 的部分亮点。该版本基于 v1.5 发布以来的超过 10,000 次提交构建,包含许多其他改进和少量破坏性变更。预览版现已可用。
评论总结
根据评论内容,总结主要观点如下:
1. 发展方向转变(认可度:高) - 评论1指出DuckDB从进程内执行引擎转向云数据仓库基础,尽管创始人曾表示不愿构建此方向。 - 关键引用:"The last year of DuckDB enhancements feel like the shift from in-process execution engine... to an engine that can serve as the foundation of a cloud data warehouse."
2. 功能期待(认可度:中) - 评论2希望增加PL/pgSQL等过程化功能,但整体仍高度评价项目。 - 关键引用:"Was hoping to see procedural functionality like PL/pgSQL... regardless, an astonishing project overall."
3. 实用性与便携性(认可度:高) - 评论3称赞其成为数据存储、处理、集成甚至图分析的首选工具,便携性带来乐趣。 - 关键引用:"It has become one of my go to tools for storing, data processing, integrations and now even graph... it's so portable."
4. 运行时大小关注(认可度:中) - 评论4关心运行时大小,计划在浏览器中运行精简WASM版本。 - 关键引用:"What about the runtime size? I care this because I intend to run a stripped WASM version of DuckDB in browser."
5. 资源效率与跨环境能力(认可度:高) - 评论5强调其大幅降低资源需求,能在低端硬件上处理超内存数据,已在三家公司推广。 - 关键引用:"greatly lowering resource requirements... ability to do out of core bigger than memory data processing on lower end consumer grade hardware is remarkable."