TL;DR

  • DuckLake는 메타데이터를 카탈로그 데이터베이스에, 데이터를 Parquet 파일에 저장하는 개방형 레이크하우스 형식이며, DuckDB 확장 기능으로 직접 읽고 쓸 수 있음.
  • 확장 기능은 INSTALL ducklake;로 설치할 수 있고, 최신 개발 버전은 core_nightly 저장소에서 강제 설치할 수 있음.
  • ATTACH 구문으로 DuckLake 데이터베이스를 연결하면 표준 SQL로 테이블 생성·수정·조회가 가능함.
  • 시간 이동, 스키마 진화, 변경 데이터 피드(Change Data Feed)를 지원함.
  • 확장 기능의 빌드·실행·테스트 절차와 기여 대상 브랜치는 각각 make, 번들 DuckDB 셸, main임.

DuckDB DuckLake 확장 기능

  • DuckLake는 SQL과 Parquet를 기반으로 구축된 개방형 레이크하우스 형식임.
  • 메타데이터는 카탈로그 데이터베이스에 저장하고 데이터는 Parquet 파일에 저장하며, DuckLake 확장 기능은 DuckDB에서 데이터를 직접 읽고 쓸 수 있게 함.
  • 자세한 정보는 DuckLake 웹사이트에서 확인할 수 있음.

설치

  • INSTALL ducklake; 명령으로 DuckLake를 설치할 수 있음.
  • 최신 개발 버전은 FORCE INSTALL ducklake FROM core_nightly; 명령으로 core_nightly에서 강제 설치할 수 있음.

사용법

  • ATTACH 구문으로 DuckLake 데이터베이스를 연결한 뒤 표준 SQL로 테이블을 생성·수정·조회할 수 있음.
  • 사용 예시에서는 metadata.ducklake라는 DuckDB 데이터베이스 파일에 메타데이터를 저장하고, file_path/ 디렉터리의 Parquet 파일에 데이터를 저장함.
  • 연결된 데이터베이스를 my_ducklake로 지정하고 my_table 테이블에 정수형 id 열과 문자열형 val 열을 생성함.
  • Hello와 World 값을 삽입한 뒤 테이블을 조회하면 두 행이 반환됨.

업데이트

  • id가 2인 행의 val 값을 DuckLake로 변경할 수 있으며, 변경 후 조회 결과에는 Hello와 DuckLake가 표시됨.

시간 이동

  • AT (VERSION => 2)를 사용해 버전 2의 테이블 데이터를 조회할 수 있음.
  • 예시에서는 버전 2의 값인 Hello와 World가 반환됨.

스키마 진화

  • ALTER TABLE로 문자열형 new_column 열을 추가할 수 있음.
  • 기존 두 행의 새 열 값은 NULL로 표시됨.

변경 데이터 피드

  • table_changes('my_table', 2, 2)로 테이블의 변경 데이터를 조회할 수 있음.
  • 예시 결과에는 스냅샷 식별자, 행 식별자, 변경 유형, id, val 열이 포함되며, 스냅샷 2에서 Hello와 World 두 행이 삽입된 것으로 표시됨.
  • 자세한 내용은 사용 가이드에서 확인할 수 있음.

확장 기능 빌드 및 로드

  • 빌드 전에 깃 서브모듈을 초기화하고 업데이트한 뒤 make pull과 make를 실행함.
  • 여러 코어를 사용해 빌드하려면 make GEN=ninja release를 사용함.
  • 실행에는 번들된 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으로 실행함.