プログラミング
DuckDBのDuckLake拡張機能
要約
DuckDBの新しい拡張機能であるDuckLakeは、SQLとParquetファイル上に構築されたオープンなLakehouseフォーマットを提供します。これにより、DuckDBはDuckLakeのメタデータとデータを直接読み書きできるようになり、データレイクハウスの操作が簡素化されます。
全文翻訳
DuckDB DuckLake拡張機能
DuckLakeは、SQLとParquet上に構築されたオープンなLakehouseフォーマットです。DuckLakeは、メタデータをカタログデータベースに格納し、データをParquetファイルに格納します。DuckLake拡張機能により、DuckDBはDuckLakeから直接データを読み書きできます。詳細については、DuckLakeのウェブサイトをご覧ください。
インストール
DuckLakeは、INSTALLコマンドを使用してインストールできます。
INSTALL ducklake;
最新の開発バージョンはcore_nightlyからインストールできます。
FORCE INSTALL ducklake FROM core_nightly;
使用方法
DuckLakeデータベースは、ATTACH構文を使用してアタッチできます。その後、標準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 │
└─────────────┴───────┴─────────────┴───────┴─────────┘
詳細については、使用ガイドをご覧ください。
拡張機能のビルドとロード
ビルドするには、以下を実行します。
git submodule init
git submodule update --recursive
# マルチコアでビルドするには、`make GEN=ninja release`を使用します
make
サブモジュールは、.github/duckdb-versionのDuckDBバージョンにピン留めされており、CIがビルドするものです。make pullはそれらをブランチの先端に移動させ、ビルドが失敗する可能性があります。
実行するには、バンドルされたduckdbシェルを実行します。
./build/release/duckdb
貢献
DuckLake拡張機能への外部からの貢献を歓迎します。現在、アクティブな開発ブランチは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をカタログデータベースとして使用してDuckLakeテストを実行する(実行中のPostgreSQLが必要)
./build/release/test/unittest --test-config test/configs/postgres.json
# SQLiteをカタログデータベースとして使用してDuckLakeテストを実行する
./build/release/test/unittest --test-config test/configs/sqlite.json
# 削除ベクトルを有効にしてテストを実行する
./build/release/test/unittest --test-config test/configs/deletion_vectors.json