duckdb/ducklake

GitHub: duckdb/ducklake

DuckLake 是基于 DuckDB 的湖仓一体化扩展,通过目录数据库管理元数据并以 Parquet 存储数据,简化湖仓架构与查询。

Stars: 2624 | Forks: 164

DuckLake logo

# DuckDB DuckLake 扩展 DuckLake 是一种基于 SQL 和 Parquet 构建的开湖仓格式。DuckLake 在 [目录数据库](https://ducklake.select/docs/stable/duckdb/usage/choosing_a_catalog_database) 中存储元数据,并在 Parquet 文件中存储数据。DuckLake 扩展允许 DuckDB 直接读写 DuckLake 数据。 更多信息请参考 [DuckLake 网站](https://ducklake.select)。 ## 安装 DuckLake 可以使用 `INSTALL` 命令安装: ``` INSTALL ducklake; ``` 最新开发版本可从 `core_nightly` 安装: ``` FORCE INSTALL ducklake FROM core_nightly; ``` ## 用法 DuckLake 数据库可以使用 [`ATTACH`](https://duckdb.org/docs/stable/sql/statements/attach.html) 语法附加,之后即可使用标准 SQL 创建、修改和查询表。 以下是一个简短的用法示例,它将元数据存储在名为 `metadata.ducklake` 的 DuckDB 数据库文件中,并将数据存储在 `file_path` 目录中的 Parquet 文件内: ``` ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/'); USE my_ducklake; CREATE TABLE my_ducklake.my_table(id INTEGER, val VARCHAR); INSERT INTO my_ducklake.my_table VALUES (1, 'Hello'), (2, 'World'); FROM my_ducklake.my_table; ┌───────┬─────────┐ │ id │ val │ │ int32 │ varchar │ ├───────┼─────────┤ │ 1 │ Hello │ │ 2 │ World │ └───────┴─────────┘ ``` ##### 更新 ``` UPDATE my_ducklake.my_table SET val='DuckLake' WHERE id=2; FROM my_ducklake.my_table; ┌───────┬──────────┐ │ id │ val │ │ int32 │ varchar │ ├───────┼──────────┤ │ 1 │ Hello │ │ 2 │ DuckLake │ └───────┴──────────┘ ``` ##### 时间旅行 ``` FROM my_ducklake.my_table AT (VERSION => 2); ┌───────┬─────────┐ │ id │ val │ │ int32 │ varchar │ ├───────┼─────────┤ │ 1 │ Hello │ │ 2 │ World │ └───────┴─────────┘ ``` ##### 模式演化 ``` ALTER TABLE my_ducklake.my_table ADD COLUMN new_column VARCHAR; FROM my_ducklake.my_table; ┌───────┬──────────┬────────────┐ │ id │ val │ new_column │ │ int32 │ varchar │ varchar │ ├───────┼──────────┼────────────┤ │ 1 │ Hello │ NULL │ │ 2 │ DuckLake │ NULL │ └───────┴──────────┴────────────┘ ``` ##### 变更数据馈送 ``` FROM my_ducklake.table_changes('my_table', 2, 2); ┌─────────────┬───────┬─────────────┬───────┬─────────┐ │ snapshot_id │ rowid │ change_type │ id │ val │ │ int64 │ int64 │ varchar │ int32 │ varchar │ ├─────────────┼───────┼─────────────┼───────┼─────────┤ │ 2 │ 0 │ insert │ 1 │ Hello │ │ 2 │ 1 │ insert │ 2 │ World │ └─────────────┴───────┴─────────────┴───────┴─────────┘ ``` 更多信息请参考 [用法](https://ducklake.select/docs/stable/duckdb/introduction) 指南。 ## 构建与加载扩展 要构建扩展,请输入: ``` git submodule init git submodule update # 使用多个核心进行构建,请执行 `make GEN=ninja release` make pull make ``` 要运行,请执行捆绑的 `duckdb` 命令行工具: ``` ./build/release/duckdb ``` ## 贡献 我们欢迎对 DuckLake 扩展的外部贡献。目前我们有两个活跃分支,具体贡献需根据情况选择合适的分支。请注意,Bug 修复始终受到欢迎。对于新功能,请在开始实现前与团队协调。 1. `main`。我们的主分支使用 DuckDB `main` 作为子模块。如果您的贡献是新功能,或需要 DuckLake 规范变更,或严格依赖 DuckDB `main` 的变更,请针对此分支。 2. `1.5-variegata`。此处使用 DuckDB `1.5-variegata` 作为子模块。如果您的贡献是不需要 DuckLake 规范变更的 Bug 修复,请针对此分支。
标签:ATTACH, Catalog, Data Lake, DuckDB, DuckDB Extension, DuckLake, Gradle集成, Lakehouse, Metadata, Parquet, SQL, 元数据, 元数据目录, 分析数据库, 多线程, 大数据, 开源, 扩展, 数据湖, 数据管理, 湖仓一体, 目录扫描, 系统审计, 集成