Skip to content

Experimental DuckLake sink behind --destination=ducklake #71

Description

@viggy28

Parent: #27
Depends on benchmark signal from the DuckLake benchmark harness.

Goal

Add an experimental DuckLake destination/sink behind --destination=ducklake.

Proposed approach

Use DuckDB's ducklake extension as the writer instead of implementing DuckLake metadata directly.

Example shape:

INSTALL ducklake;
LOAD ducklake;
ATTACH 'ducklake:<metadata-catalog>' AS streambed (DATA_PATH '<data-path>');
USE streambed;

Scope

  • Add destination configuration, e.g. --destination=iceberg|ducklake.
  • Add a DuckLake writer/sink package.
  • Create/update schemas and tables through DuckDB SQL.
  • Apply flushed CDC batches through SQL operations:
    • INSERT for inserts
    • DELETE ... USING for deletes
    • update semantics as delete + insert or SQL UPDATE, depending on benchmark findings
  • Persist/derive last_flush_lsn semantics for restart safety.
  • Keep Iceberg as the default destination.

Open questions

  • Best metadata catalog for local/dev and production: DuckDB file vs Postgres catalog.
  • How to store Streambed-specific state such as last flushed LSN.
  • How much dedup/CoW logic remains in Streambed vs delegated to DuckLake/DuckDB SQL.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions