DuckLakeはレイクハウスアーキテクチャを採用し、メタデータとデータを分離することでDuckDBを拡張します。プロジェクトのREADMEによると、DuckLakeはメタデータをカタログデータベースに格納し、実際のデータはParquetファイルとして保持します。この設計により、ATTACHステートメントでレイクを接続した後、標準のSQLコマンドを使用してDuckDBからDuckLakeが管理するデータの読み書きが直接行えます。READMEには例として、メタデータがmetadata.ducklakeというDuckDBファイルに保存され、データがfile_pathディレクトリ以下のParquetファイルに格納され、ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/') とアクセスされることが示されています。

DuckLakeプロジェクトの横長ロゴ。装飾的なフォントでDuckLakeという単語が表示されています。
DuckDB向けレイクハウス拡張機能を表すDuckLakeプロジェクトのロゴ。github.com

このロゴは、記事で説明されているレイクハウスアーキテクチャと機能の主題である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 でコンパイルします。ビルド後、バンドルされたDuckDBバイナリは ./build/release/duckdb で実行できます。プロジェクトでは、さまざまな構成での拡張機能の検証用テストコマンドスイートも提供されており、例えば ./build/release/test/unittest で全テストを実行、単一のテストファイルを実行、パターンにマッチするテストを実行、DuckLakeをストレージバックエンドとしてDuckDBコアテストを実行、PostgreSQLまたはSQLiteをカタログデータベースとしてDuckLakeテストを実行、さらに削除ベクターを有効にした状態でテストを実行するといった方法があります。