Lakehouse 포맷
Iceberg, Delta, DuckLake를 DuckDB에서 읽고 쓰는 범위와 extension 안정성 기준을 정리합니다.
핵심 요약
- Iceberg, Delta, DuckLake는 모두 파일+metadata 구조지만 트랜잭션·schema evolution·time travel·catalog 연동 방식이 제각각이라 extension 지원 범위와 안정성을 먼저 확인합니다.
- iceberg extension은 httpfs/azure와 함께 object storage에 접근하며, 단순 metadata scan과 REST catalog attach는 운영 의미가 다르므로 읽기 전용/catalog mutation을 분리합니다.
- delta extension은 read/write와 AT (VERSION => n) time travel을 지원하고, Delta log checkpoint·credential chain·release note를 함께 확인합니다.
- DuckLake는 metadata를 SQL DB에, data files를 별도 path에 둡니다. 2.0과 함께 나온 1.1 사양으로 catalog를 이전할지는 확장 업데이트와 별도로 결정합니다.
- 단일 팀 mart는 Plain Parquet/DuckDB file, 여러 엔진이 table history를 공유하면 Iceberg/Delta, catalog mutation이 민감하면 read-only scan으로 제한합니다.
DuckDB는 단순 파일 스캐너를 넘어 lakehouse 포맷과도 연결됩니다. Iceberg, Delta, DuckLake는 모두 "파일 + metadata" 구조지만 트랜잭션, schema evolution, time travel, catalog 연동 방식이 제각각입니다. 그래서 DuckDB에서 쓰려면 포맷마다 지원 범위와 extension 안정성을 먼저 따져봐야 합니다.
지원 포맷 비교
| 포맷 | DuckDB extension | 강점 | 운영 주의 |
|---|---|---|---|
| Iceberg | iceberg | open table format, metadata scan, REST catalog 연동 | extension이 릴리스 사이에도 업데이트될 수 있음 |
| Delta | delta | Delta table read/write, time travel, append | platform별 regression과 credential chain 확인 |
| DuckLake | ducklake | DuckDB 친화 lakehouse, SQL metadata catalog | 1.0 catalog 유지와 1.1 migration을 구분 |
| Plain Parquet | built-in/core | 단순, 넓은 호환성 | ACID/table history는 직접 관리 |
Iceberg
INSTALL iceberg;
LOAD iceberg;
SELECT count(*)
FROM iceberg_scan('s3://warehouse/db/table/metadata/v1.metadata.json');Iceberg extension은 httpfs나 azure extension과 함께 object storage에 접근합니다. catalog를 붙이지 않는 단순 scan과 REST catalog attach는 운영상 의미가 다릅니다. 읽기 전용 탐색인지, table write와 catalog mutation까지 할 것인지를 나눠서 문서로 남깁니다.
Delta
INSTALL delta;
LOAD delta;
CREATE SECRET (
TYPE s3,
PROVIDER credential_chain
);
SELECT *
FROM delta_scan('s3://company-lake/delta/orders');Delta extension은 local/remote Delta table read/write를 지원합니다. time travel은 attach 후 AT (VERSION => n) 형태로 읽습니다. 운영에서는 Delta log checkpoint, cloud provider credential chain, extension release note를 함께 챙깁니다.
DuckLake
DuckLake는 metadata를 SQL database에 두고 data files를 별도 path에 둡니다.
INSTALL ducklake;
LOAD ducklake;
ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'data_files');
USE my_ducklake;
FROM ducklake_snapshots('my_ducklake');2.0용 확장은 DuckLake 1.0 catalog를 계속 읽고 씁니다. 1.1 사양 이전은 명시적 선택이며 catalog 백업과 consumer 검증 후 AUTOMATIC_MIGRATION true로 attach합니다. 중첩 schema, PostgreSQL/SQLite catalog의 VARIANT inlining 등 1.1 요구 기능을 먼저 확인합니다. 엔진 버전·확장 버전·catalog 사양은 각각 기록합니다. DuckLake 1.1.
선택 기준
| 질문 | 추천 |
|---|---|
| 단일 팀 분석 mart인가 | Plain Parquet 또는 DuckDB file |
| 여러 엔진이 같은 table history를 공유해야 하나 | Iceberg/Delta |
| DuckDB 중심으로 lakehouse를 새로 설계하나 | DuckLake 검토 |
| 단순 export/검증인가 | Plain Parquet |
| catalog mutation 권한이 민감한가 | read-only scan으로 제한 |
2.0 Delta·Iceberg 도입 점검
Delta는 테이블 생성·append와 time travel을 구분해서 검증합니다. 생성 시 CREATE TABLE 별칭.별칭을 사용하고, timestamp time travel에는 시간대를 명시합니다. 과거 버전/시점으로 attach한 테이블은 읽기 전용입니다. read/write 지원을 모든 UPDATE·DELETE·MERGE 지원으로 해석하지 않습니다. Delta 기능 범위.
Iceberg REST catalog에서는 2.0의 정식 옵션명이 URI이며 ENDPOINT는 deprecated alias입니다. namespace 기반 경로가 필요한 catalog의 DEFAULT_TABLE_LOCATION_FROM_NAMESPACE, catalog가 반환한 파일 metadata를 읽는 USE_METADATA_LOCATION, PREFIX·NAMESPACE_SEPARATOR를 배포 환경에 맞춰 점검합니다. TABLE_RESOLUTION='eager'는 미해결 schema가 있는 서버에 Quack client를 붙이는 경우 필요할 수 있지만 catalog 열거 비용이 커집니다. Iceberg 옵션.