
2026/10/08 2:40
DuckDB Duck Lake
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
DuckLake は SQL および Parquet に基づくオープンな Lakehouse フォーマットであり、Parquet ファイルにデータを、PostgreSQL または SQLite などのカタログデータベースにメタデータとして格納します。これにより、DuckDB が
ducklake エクステンションを通じてデータを直接読み書きできます。ユーザーは DuckLake データベースを ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/'); のような構文でアタッチした後、標準の SQL を使用してテーブルを作成、変更、照会できます。主な機能には、ALTER TABLE コマンドによるスキーマの進化(スキーマの改変)や、FROM my_ducklake.my_table AT (VERSION => 2); のように履歴データの状態を照会するためのタイムトラベルが挙げられます。さらに、DuckLake では FROM my_ducklake.table_changes('my_table', 2, 2) を通じてアクセス可能な変更データフィードもサポートしています。このエクステンションは FORCE INSTALL ducklake FROM core_nightly; コマンドでインストールでき、ビルド対象となる DuckDB のバージョンは .github/duckdb-version に指定されます(注:サブモジュールを更新する make pull を実行すると、ビルドに失敗する可能性があります)。アクティブな開発およびコントリビューションには、main ブランチをターゲットとしてください。テストは ./build/release/test/unittest (全テスト)または特定のパターンを使用して実行でき、テストでは --test-config test/configs/postgres.json などの設定ファイルを通じて PostgreSQL または SQLite のカタログを使用できます。全体として、DuckLake は標準の SQL スタック内でのデータエンジニアリングワークフローを簡素化し、独自ツールからの解放を実現するとともに、スキーマの進化、バージョン管理、変更追跡をサポートします。本文
DuckLake 拡張機能
DuckLake は、SQL および Parquet に基づくオープンな Lakehouse フォーマットです。
- メタデータ: カタログデータベースに保存
- データ: Parquet ファイルに保存
ducklake 拡張機能を有効化することで、DuckDB が DuckLake データを直接読み書きできるようになります。詳細は DuckLake のウェブサイト を参照してください。
インストール
最新開発版をインストールするには、以下のコマンドを実行してください。
FORCE INSTALL ducklake FROM core_nightly;
使い方
ATTACH 構文を使用して DuckLake データベースに接続し、その後標準 SQL でテーブルの作成、変更、クエリを実行できます。
以下は、メタデータを
metadata.ducklake ファイルに、データは file_path ディレクトリの Parquet ファイルに保存する例です。
-- 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'); -- クエリの実行 SELECT * FROM my_ducklake.my_table;
| id | val |
|---|---|
| int32 | varchar |
| 1 | Hello |
| 2 | World |
更新
データを変更する操作です。
UPDATE my_ducklake.my_table SET val='DuckLake' WHERE id=2; SELECT * FROM my_ducklake.my_table;
| id | val |
|---|---|
| int32 | varchar |
| 1 | Hello |
| 2 | DuckLake |
タイムトラベル機能
過去の変更履歴を参照できます。
-- バージョン 2 のデータを参照 SELECT * 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; SELECT * FROM my_ducklake.my_table;
| id | val | new_column |
|---|---|---|
| int32 | varchar | varchar |
| 1 | Hello | NULL |
| 2 | DuckLake | NULL |
変更データフィード(CDC)
テーブルの変更履歴を参照できます。
SELECT * 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
注意点:
- サブモジュールは
に記述された DuckDB バージョンに固定されています。.github/duckdb-version - CI はこのバージョンに対してビルドを行います。
を実行するとサブモジュールの先頭が移動するため、ビルドが失敗する可能性があります。make pull
実行方法
同梱された DuckDB シェルを実行して拡張機能を使用します。(※元のテキストでコマンドが不完整でした)
貢献について
外部の方からの DuckLake 拡張機能へのコントリビューションを歓迎します。
- 開発ターゲット:
ブランチmain - 全てのコントリビューションは
ブランチをターゲットにしてください。main
テスト実行
# すべてのテストの実行 ./build/release/test/unittest # シングルテストファイルの実行 ./build/release/test/unittest test/sql/transaction/create_conflict.test # パターンに一致するテストの実行 ./build/release/test/unittest "test/sql/partitioning/*" # DuckDB コアテスト (DuckLake をストレージバックエンドとして使用) ./build/release/test/unittest --test-config test/configs/attach_ducklake.json --test-dir duckdb # PostgreSQL をカタログデータベースとして使用するテスト(PostgreSQL の実行が必要) ./build/release/test/unittest --test-config test/configs/postgres.json # SQLite をカタログデータベースとして使用するテスト ./build/release/test/unittest --test-config test/configs/sqlite.json # デリションベクターを有効化した状態でテストを実行 ./build/release/test/unittest --test-config test/configs/deletion_vectors.json