概要
- DuckLake は SQL と Parquet を基盤としたオープンなLakehouseフォーマット
- DuckDB 拡張機能として DuckLake を直接読み書き可能
- メタデータ はカタログDB、 データ はParquetファイルに保存
- インストール・利用方法や スキーマ進化/タイムトラベル 等の主要機能
- ビルド/テスト/コントリビューション 手順も網羅
DuckLake概要と特徴
- DuckLake :SQLとParquetを基盤とした オープンLakehouseフォーマット
- メタデータ :カタログデータベースに格納
- データ :Parquetファイルとして保存
- DuckDB拡張機能 :DuckLakeのデータを直接読み書き可能
- 詳細は DuckLake公式ウェブサイト 参照
インストール方法
- DuckLake拡張機能のインストールコマンド
INSTALL ducklake;
- 最新開発版のインストールコマンド
FORCE INSTALL ducklake FROM core_nightly;
基本的な利用方法
- DuckLakeデータベース のアタッチ
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;
データ更新・参照
- UPDATE文 によるデータ更新
UPDATE my_ducklake.my_table SET val='DuckLake' WHERE id=2;
- 結果確認
FROM my_ducklake.my_table;
タイムトラベル機能
- バージョン指定 で過去状態を参照
FROM my_ducklake.my_table AT (VERSION => 2);
スキーマ進化
- ALTER TABLE によるカラム追加
ALTER TABLE my_ducklake.my_table ADD COLUMN new_column VARCHAR;
- NULL値 で新カラムが初期化
変更データフィード(Change Data Feed)
- 変更履歴の取得
FROM my_ducklake.table_changes('my_table', 2, 2);
- スナップショットID、 変更種別、 レコード内容 の確認
詳細ガイド
- さらなる詳細は Usage guide 参照
拡張機能のビルド・ロード
- サブモジュール初期化
git submodule initgit submodule update --recursive
- ビルド(マルチコア対応)
make GEN=ninja release
- DuckDBバージョン管理
- サブモジュールは .github/duckdb-version に連動
- 最新ブランチへの移動(ビルド失敗の可能性あり)
make pull
- シェル起動
./build/release/duckdb
コントリビューションガイド
- 外部コントリビューション 歓迎
- mainブランチ が開発の中心
- すべてのプルリクはmain対象
テスト実行方法
- すべてのDuckLake拡張テスト
./build/release/test/unittest
- 単一テストファイル
./build/release/test/unittest test/sql/transaction/create_conflict.test
- パターン一致テスト
./build/release/test/unittest "test/sql/partitioning/*"
- DuckLakeをストレージバックエンドとしたDuckDBコアテスト
./build/release/test/unittest --test-config test/configs/attach_ducklake.json --test-dir duckdb
- PostgreSQLカタログDB利用テスト(要PostgreSQL起動)
./build/release/test/unittest --test-config test/configs/postgres.json
- SQLiteカタログDB利用テスト
./build/release/test/unittest --test-config test/configs/sqlite.json
- デリーションベクター有効テスト
./build/release/test/unittest --test-config test/configs/deletion_vectors.json