DuckDB DuckLake Extensie

Voor meer informatie kun je de website van DuckLake bezoeken.

Installatie

DuckLake kan worden geïnstalleerd met het INSTALL-commando:

INSTALL ducklake;

De nieuwste ontwikkelversie kan worden geïnstalleerd via core_nightly:

FORCE INSTALL ducklake FROM core_nightly;

Gebruik

DuckLake-databases kunnen worden gekoppeld via de ATTACH-syntaxis. Daarna kunnen tabellen worden gemaakt, gewijzigd en opgevraagd met standaard SQL.

Hieronder volgt een kort gebruiksvoorbeeld waarbij de metadata wordt opgeslagen in een DuckDB-databasebestand genaamd metadata.ducklake, en de data in Parquet-bestanden in de map file_path/:

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;

Resultaat:

id (int32)val (varchar)
1Hello
2World

Updates

UPDATE my_ducklake.my_table SET val='DuckLake' WHERE id=2;
FROM my_ducklake.my_table;

Resultaat:

id (int32)val (varchar)
1Hello
2DuckLake

Time Travel

FROM my_ducklake.my_table AT (VERSION => 2);

Resultaat:

id (int32)val (varchar)
1Hello
2World

Schema-evolutie

ALTER TABLE my_ducklake.my_table ADD COLUMN new_column VARCHAR;
FROM my_ducklake.my_table;

Resultaat:

id (int32)val (varchar)new_column (varchar)
1HelloNULL
2DuckLakeNULL

Change Data Feed

FROM my_ducklake.table_changes('my_table', 2, 2);

Resultaat:

snapshot_id (int64)rowid (int64)change_type (varchar)id (int32)val (varchar)
20insert1Hello
21insert2World

Voor meer informatie kun je de gebruiksgids raadplegen.

Bouwen en laden van de extensie

Om de extensie te bouwen, voer je de volgende commando's uit:

git submodule init
git submodule update --recursive
# Om te bouwen met meerdere cores, gebruik: `make GEN=ninja release`
make

De submodules zijn gekoppeld aan de DuckDB-versie in .github/duckdb-version, wat ook de versie is waarop de CI (Continuous Integration) bouwt. Het commando make pull verplaatst ze naar het uiteinde van hun branch, waardoor de build kan mislukken.

Om de extensie uit te voeren, start je de gebundelde duckdb-shell:

./build/release/duckdb

Bijdragen

Externe bijdragen aan de DuckLake-extensie zijn welkom. De actieve ontwikkelbranch is momenteel main; alle bijdragen dienen op deze branch gericht te zijn.

Testen

Hieronder staan de commando's voor het uitvoeren van verschillende tests:

  • Alle DuckLake-extensietests uitvoeren:

``bash ./build/release/test/unittest ``

  • Een enkel testbestand uitvoeren:

``bash ./build/release/test/unittest test/sql/transaction/create_conflict.test ``

  • Tests uitvoeren die aan een specifiek patroon voldoen:

``bash ./build/release/test/unittest "test/sql/partitioning/*" ``

  • DuckDB-core tests uitvoeren met DuckLake als storage backend:

``bash ./build/release/test/unittest --test-config test/configs/attach_ducklake.json --test-dir duckdb ``

  • DuckLake-tests uitvoeren met PostgreSQL als catalogusdatabase (vereist een draaiende PostgreSQL-instantie):

``bash ./build/release/test/unittest --test-config test/configs/postgres.json ``

  • DuckLake-tests uitvoeren met SQLite als catalogusdatabase:

``bash ./build/release/test/unittest --test-config test/configs/sqlite.json ``

  • Tests uitvoeren met 'deletion vectors' ingeschakeld:

``bash ./build/release/test/unittest --test-config test/configs/deletion_vectors.json ``