DuckDB 的 DuckLake

查看原文 HN 讨论

文章摘要

链接指向 GitHub 上的 duckdb/ducklake 仓库,也就是 DuckDB 的 DuckLake 扩展。仓库简介说 DuckLake 是一种「集成了数据湖和目录(catalog)的格式」。

核心设计。 DuckLake 是一种开放的 Lakehouse 格式,建立在 SQL 和 Parquet 之上:数据以 Parquet 文件形式存放,元数据存进一个「目录数据库」。这和 Delta Lake、Apache Iceberg 不同,那两种格式靠对象存储上的 JSON/Avro 日志或清单文件来记录哪些数据文件有效,DuckLake 则直接把这些信息放进一个支持事务的数据库。根据评论里 DuckLake 首席开发者的说明,目录库可以是 DuckDB、SQLite、PostgreSQL、DuckDB + Quack,或者处于实验阶段的 MySQL。

怎么用。 安装只需要在 DuckDB 里执行 INSTALL ducklake;,开发版可以从 core_nightly 渠道强制安装。之后用 ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/') 挂载,这个例子把元数据放在一个 DuckDB 文件里,数据写到指定目录下的 Parquet 文件中。挂载后就能用标准 SQL 建表、插入、更新、查询。README 演示了几个 Lakehouse 常用功能:

开发与测试。 扩展用 C++ 编写,源码依赖以子模块形式固定在 .github/duckdb-version 指定的 DuckDB 版本上。测试可以针对不同的目录后端分别运行,包括 PostgreSQL、SQLite 和启用删除向量的配置,也可以把 DuckDB 核心测试跑在 DuckLake 存储上。项目欢迎外部贡献,开发分支是 main。

从评论看,DuckLake 规范已经发布 1.0,MotherDuck 在推广它(还提供 O’Reilly《DuckLake: The Definitive Guide》的免费下载),社区里也已经有不依赖 DuckDB 的独立实现。

HN 评论精华

这个帖子评论不多(30 多条),但有 DuckLake 首席开发者和一个第三方实现的作者参与。

DuckLake 只是一份规范,不一定要用 DuckDB

为什么还用 C++

成熟度和适用场景

其他