DuckLake 通过将元数据和数据分离来为 DuckDB 引入湖仓架构。根据项目的 README,DuckLake 将元数据存储在目录数据库中,将实际数据保存为 Parquet 文件。此设计使得 DuckDB 在通过 ATTACH 语句挂载湖后,可以使用标准 SQL 命令直接读取和写入 DuckLake 管理的数据。README 中给出的示例显示,元数据存储在名为 metadata.ducklake 的 DuckDB 文件中,数据位于 file_path 目录下的 Parquet 文件中,通过 ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/') 进行访问。
此徽标标识 DuckLake 项目,即本文所描述的具有湖仓架构和功能的项目。
该扩展在使用指南中展示了若干高级数据湖功能。用户可以像使用任何 DuckDB 模式一样创建表、插入行并执行查询。时间旅行可通过类似 FROM my_ducklake.my_table AT (VERSION => 2); 的查询实现,返回表在特定版本下的状态。模式演变通过添加列的 ALTER TABLE 语句来处理,变更数据馈送可通过 table_changes 函数访问,以检查快照、行 ID、变更类型以及修改后的数据。这些功能在仓库的文档中有具体的 SQL 片段演示,包括 INSERT、UPDATE 和 SELECT 语句,展示数据和元数据如何演变。
安装非常直接:可以使用 INSTALL ducklake; 命令添加该扩展;最新的开发版本可通过 FORCE INSTALL ducklake FROM core_nightly; 从 core_nightly 渠道获取。从源代码构建需要初始化 git 子模块,递归更新它们,并使用 make GEN=ninja release 进行编译。编译后,可以通过 ./build/release/duckdb 运行捆绑的 DuckDB 二进制文件。项目还提供了一套测试命令,用于在各种配置下验证扩展,例如使用 ./build/release/test/unittest 运行所有测试,运行单个测试文件,运行匹配特定模式的测试,使用 DuckLake 作为存储后端运行 DuckDB 核心测试,使用 PostgreSQL 或 SQLite 作为目录数据库运行 DuckLake 测试,以及在启用删除向量的情况下运行测试。