DuckDB 2.0.0 LTS Cinnamon Teal 版本说明
DuckDB 2.0.0 LTS 概览
DuckDB 2.0.0,代号“Cinnamon Teal”,是一个重大的功能版本,标志着该项目进入长期支持 (LTS) 阶段,支持期至少持续到 2027 年 10 月。该版本基于自 1.5 版本以来的近 20,000 次提交构建,重点在于扩展数据库作为进程内引擎和服务器端分析平台的能力。
通过 Quack 实现客户端-服务器架构
DuckDB 2.0.0 正式确立了 Quack 协议,实现了原生的客户端-服务器架构。用户现在可以使用 CALL quack_serve() 运行 DuckDB 服务器,并使用新的 CONNECT 语句从远程客户端进行连接。此功能简化了分布式工作流,允许用户挂载远程数据库(包括 PostgreSQL 和 MySQL),并利用远程下推优化器在源服务器上执行查询,而不是通过网络拉取数据。
性能与异步 I/O
异步 I/O 现在是读取 Parquet 和 CSV 文件的默认方式,将 I/O 层与查询处理解耦。这一改进使数据库能够同时处理多个读取请求,显著提高了 S3 等对象存储的吞吐量。早期采用者报告称,此更改使 DuckDB 能够在高核心数的云实例上有效扩展,一些用户指出在拥有多达 192 个 vCPU 的机器上性能有所提升,而之前的版本在 64 个 vCPU 时就会达到瓶颈。
SQL 特性与数据处理
触发器与物化视图
DuckDB 2.0 引入了 CREATE TRIGGER 支持,包括 BEFORE 和 AFTER 事件,以及 FOR EACH ROW 和 FOR EACH STATEMENT 功能。这一新增功能允许进行审计日志记录和实现增量维护的物化视图,填补了 DuckDB 在复杂数据仓库任务中实用性的重要空白。
VARIANT 类型
VARIANT 类型现在是一等公民,旨在存储半结构化数据(如 JSON),同时保持列式执行性能。引擎会自动“拆解” VARIANT 数据中的常见结构,从而实现比原始文本 JSON 更高效的压缩和高速查询。
SQL 方言增强
- 代理模式 (Agent Mode): CLI 现在可以检测到它是否由 AI 编码助手驱动,自动将输出格式化为紧凑的 Markdown 表格,并提供查询成本估算以减少 Token 使用量。
- 解析器: 一个新的、基于 PEG 的可扩展解析器现在成为默认设置,允许在保持向后兼容性的同时进行未来的语法扩展。
- 新语法: 增加了对数据修改 CTE、用于向量相似度搜索的
NEAREST连接以及嵌套模式(例如finance.reports)的支持。
迁移与内部结构
升级到 2.0 需要注意存储兼容性,因为旧版本无法读取由 2.0.0 创建的数据库文件。关键的内部更改包括:
- 编译器要求: 该项目现在需要 C++17 编译器。
- 移除 ICU: ICU 库已被替换为用于时区和排序规则支持的原生轻量级实现。
- 弃用: 旧的单箭头 lambda 语法和 amalgamation 构建已被弃用,对 macOS x86_64 的支持正在逐步淘汰。
社区见解
用户强调了 DuckDB 2.0 在生产环境中的多功能性。一位用户提到使用该引擎在不到两小时内将 7 TB 的日志压缩为 Parquet 格式,创建了一个可通过签名 URL 访问的“冻结”数据湖。另一位开发者强调了新的客户端-服务器功能的价值,认为它为传统的、资源密集型数据栈提供了一种轻量级的替代方案。虽然 Quack 协议是原生选择,但一些社区成员也在利用自定义扩展将 DuckDB 与 Postgres 线协议或 Arrow Flight 连接起来,以实现更广泛的生态系统兼容性。
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch