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으로 실행함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요