ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DuckDB 2.0:从嵌入式分析引擎到轻量级数据平台

2026/8/22 10:31:57 拓冰建站 浏览量
DuckDB 2.0:从嵌入式分析引擎到轻量级数据平台 根据官方消息DuckDB 2.0 即将于今年秋季发布。这个版本不仅仅是一次简单的功能增强而是涉及架构层面的重大演进意味着它正在发展为一个现代化的通用数据平台。本文分享 DuckDB 2.0 中的几个亮点功能最终的完整功能可以等待新版本正式发布。从嵌入式到服务器DuckDB 最初的设计目标是一个嵌入式分析型数据库引擎DuckDB 2.0 则引入了 Quack 远程协议。这就意味着 DuckDB 实例既可以作为客户端也可以作为服务端被其他 DuckDB 或者工具访问。全面支持VARIANTDuckDB 1.5 引入了 VARIANT 数据类型DuckDB 2.0 开始真正完善整个执行链路包括压缩存储、查询下推、Parquet 读写支持以及相关函数。例如CREATETABLEevents(payload VARIANT);INSERTINTOeventsVALUES({user: {id: 42, tags: [a, b]}}::JSON::VARIANT);SELECTvariant_type(payload),variant_keys(payload)FROMevents;SELECT*FROMeventsWHEREvariant_contains(payload,{user: {id:42}}::VARIANT);这个功能对于日志分析、事件分析、埋点数据分析价值非常大。期待已久的触发器一直以来DuckDB 都不支持数据库触发器TriggerDuckDB 2.0 补全了完整的触发器功能。以下是一个使用触发器实现审计的示例CREATETABLEtarget(idINTEGER,valINTEGER);CREATETABLEaudit(idINTEGER,old_valINTEGER,new_valINTEGER);CREATETRIGGERtrg_auditAFTERUPDATEONtarget REFERENCING OLDTABLEASo NEWTABLEASnFOREACH STATEMENTINSERTINTOauditSELECTn.id,o.val,n.valFROMoJOINnONo.idn.id;INSERTINTOtargetVALUES(1,10),(2,20);UPDATEtargetSETvalval*10WHEREid2;SELECT*FROMaudit;SQL方言增强DuckDB 提供了大量专有的 SQL 语句可以帮助开发者提高效率。新版本同样实现了一些扩展 SQL例如 NEAREST 连接查询SELECTq.user_id,t.product_idFROMusers qINNERJOINproducts t APPROX NEAREST2BYSIMILARITY array_cosine_similarity(q.embedding,t.embedding);以上语法将向量搜索中的 top-k 相似变成了原生 SQL 能力。另一个 SQL 扩展是支持 CTE 中使用 DMLINSERT、UPDATE、DELETE、COPYWITHmovedASMATERIALIZED(DELETEFROMstagingRETURNING*)INSERTINTOarchiveSELECT*FROMmoved;新版本还支持嵌套的 Schema 定义适合大型多租户项目CREATESCHEMAfinance;CREATESCHEMAfinance.reports;CREATETABLEfinance.reports.q3(revenueDECIMAL);新的变量引用语法$var可以用于替代 getvariable 函数SETVARIABLE threshold100;SELECT*FROMordersWHEREamount$threshold;全新的 JSON 函数json_set、json_insert、json_replace、json_remove提供了修改 JSON 文档功能例如SELECTjson_set({a:1},$.b,2);异步I/ODuckDB 2.0 开始支持异步AsyncI/O用于湖仓查询场景下的最大瓶颈网络带宽性能。异步 I/O 将查询执行层与存储访问层解耦使得 DuckDB 在等待 S3、OSS 等对象存储返回数据时无需阻塞工作线程而是可以同时发起更多远程读取请求并继续执行其他任务从而让 I/O 并发度独立于 CPU 并发度扩展。Parquet 读取与写入、CSV读取、DuckDB 原生格式读取都可以支持异步化能够显著提升在网络存储场景下的吞吐能力和查询性能。查询性能优化DuckDB 2.0 在查询优化器和执行引擎层面进行了全面增强包括部分聚合下推到 Join 之前、聚合结果复用、递归 CTE 引擎重写以及聚合算子的磁盘溢写Spill-to-Disk支持等使现有 SQL 在无需修改的情况下即可获得显著性能提升。例如对于以下递归图查询CREATETABLEedgesASSELECT(range%100_000)::INTEGERASsrc,((range*137)%100_000)::INTEGERASdstFROMrange(1_000_000);WITHRECURSIVE reachable(node)AS(SELECT0UNIONSELECTdstFROMedges,reachableWHEREsrcnode)SELECTcount(*)FROMreachable;官方给出的测试结果如下新版本获得了 40 倍性能提升全新的存储格式DuckDB 2.0 引入全新的默认存储格式Storage Format v2.0。新格式通过延迟加载列元数据Lazy Metadata Loading、默认启用 DICT_FSST 字符串压缩、更紧凑的 Delete 存储以及更严格的数据损坏校验使得大型索引和超宽表能够更快打开并且占用更少内存同时支持通过增量 RowID 重映射实现带 ART 索引表的 Checkpoint Vacuum避免全量索引重建。后续 ART Index Buffer Management 上线后ART 索引还将支持内存淘汰机制突破必须完全驻留内存的限制。全新的SQL解析器DuckDB 2.0 采用全新自研 SQL 解析器替换了长期沿用的 PostgreSQL Parser。SETdialect_compatibility_modespark;新解析器不仅提供更准确、更友好的语法错误提示还首次允许扩展Extension注册和扩展 SQL 语法为自定义关键字、语法特性和领域专用语言DSL奠定基础显著提升了 DuckDB 的可扩展性和生态发展空间。消除ICU依赖DuckDB 2.0 将时区Time Zone、日历Calendar和排序规则Collation等国际化能力逐步从对 ICU 扩展的依赖中解耦使这些基础功能能够以更轻量、更高性能的方式原生支持从而降低部署复杂度、减小运行时开销并且为 DuckDB 服务器 场景和嵌入式场景提供更好的开箱即用体验。稳定的扩展APIDuckDB 2.0 引入稳定的扩展 API开发者只需编译一次扩展即可跨多个后续 DuckDB 版本使用不再需要随着每次 DuckDB 发布重新编译。同时新版本还支持自托管扩展仓库企业可以自主发布、管理和分发内部扩展而无需依赖官方社区仓库。