DuckLake 1.0:具有SQL目录元数据的数据湖格式

DuckDB Labs最近正式发布 DuckLake 1.0,这是一种全新数据湖格式,其核心设计是将表元数据存储在 SQL 数据库中,而非散落在对象存储的大量文件里。该版本是首个 DuckDB 扩展形式的实现,支持目录级的增量小幅更新、优化的排序与分区能力,并兼容 Iceberg 风格的数据特性。

DuckDB 团队表示,传统数据湖格式采用文件式的元数据,会带来协同逻辑复杂、元数据操作缓慢、对象存储产生大量小文件等问题。Apache Iceberg、Delta Lake、Apache Hudi 均主要把元数据以文件形式存放在对象存储中,仅在上层额外添加目录服务,而DuckLake选择直接把元数据存入 SQL 数据库。

一年前官方曾发布“DuckLake宣言(DuckLake manifesto)”,提出湖仓元数据应当统一存放在数据库中,而非分散在对象存储的众多文件里。团队撰文称:

距离首次发布规范草案已过去了近一年的时间,现在,我们正式宣布 DuckLake v1.0 发布。这是可投入生产环境的正式版本,保证向后兼容。DuckLake v1.0 包含稳定的技术规范、功能完备且高性能的参考实现(DuckDB ducklake 扩展),以及未来版本的发展路线图。

DuckLake 1.0 新增了多项能力,全面优化湖仓运维与查询性能:包含数据内联能力,可处理小规模插入、更新、删除而无需生成新文件;支持排序表以加速过滤类查询;针对高基数(high-cardinality)列提供桶分区;增强地理数据类型支持;兼容 Iceberg 风格的向量删除。

关于数据内联(data inlining),该团队指出:

数据内联是 DuckLake 的标志性特性。该能力可直接在目录数据库中完成小规模增删改操作,从根源避免小文件泛滥的问题。DuckLake v1.0 已经完整支持更新与删除操作的全量内联,该功能默认开启,默认阈值为 10 行数据。

在Reddit的热门讨论帖中,用户 SutMinSnabel4 提问:

能否为 SMB 协议提供第一等的原生支持?我指的不是本地挂载文件系统(这是要依赖操作系统的),而是要能完美适配传统企业 Windows 环境,兼容 DFS、Kerberos 等全套组件,同时也要能在 macOS、Linux 上正常运行……大量企业本地部署环境仍高度依赖 SMB 协议。

Hacker News 平台上,数据平台工程师 Alexander Dahl评论说:

令人振奋!性能测试数据看起来完胜 Iceberg。有没有人已经在真实业务负载中落地试用呢?

目前 DuckLake 已提供适配 Apache DataFusion、Apache Spark、Trino 及 Pandas 的客户端。MotherDuck 同时推出了托管式的 DuckLake 服务,管理目录数据库与底层存储。

DuckLake v1.1 后续计划支持跨目录的变体内联、多删除向量 Puffin 文件等功能改进。根据路线图,DuckLake v2.0 将引入数据集的 Git 式分支能力,并内置基于角色的权限管理。

开源仓库awesome-ducklake汇总了 DuckLake 各类实战用例与开发库。DuckLake 1.0 已在GitHub开源,采用 MIT 开源许可证。

原文链接:

 DuckLake 1.0: Data Lake Format with SQL Catalog Metadata