-
pg_lake은 Postgres를 기반으로 Iceberg 테이블과 데이터 레이크 파일을 직접 통합해 트랜잭션과 고속 쿼리를 지원하는 확장 구조
- S3 등 객체 스토리지의 Parquet, CSV, JSON, Iceberg 파일을 직접 조회·가져오기·내보내기 가능
-
DuckDB 쿼리 엔진을 내부적으로 활용해 Postgres 환경 내에서 빠른 실행 성능 확보
- Iceberg 테이블 생성, 외부 파일 자동 스키마 추론, COPY 명령을 통한 S3 입출력 등 데이터 레이크하우스 기능을 단일 SQL 인터페이스로 제공
- Snowflake가 2025년 Crunchy Data 인수 후 오픈소스로 공개, Postgres 생태계에서 데이터 레이크 통합을 확장하는 기반
pg_lake 개요
-
pg_lake은 Iceberg 및 데이터 레이크 파일을 Postgres에 통합하는 확장 기능으로, Postgres를 독립형 레이크하우스 시스템으로 활용 가능
- Iceberg 테이블에 대한 트랜잭션 보장 및 빠른 쿼리 지원
- S3 등 객체 스토리지의 원시 데이터 파일 직접 접근 가능
- 주요 기능
- Iceberg 테이블 생성·수정 및 다른 엔진에서 쿼리 가능
- Parquet, CSV, JSON, Iceberg 형식의 데이터 파일 조회 및 가져오기
- COPY 명령으로 쿼리 결과를 Parquet, CSV, JSON 형식으로 객체 스토리지에 내보내기
- GDAL이 지원하는 GeoJSON, Shapefile 등 지리공간 데이터 형식 읽기
- 반정형 데이터용 내장 map 타입 제공
- heap, Iceberg, 외부 파일을 단일 SQL 쿼리에서 결합 가능
- 외부 데이터 소스에서 컬럼과 타입 자동 추론
-
DuckDB 엔진을 통한 고속 실행
설치 및 구성
- 설치 방법
-
Docker를 이용한 간편 실행
-
소스 빌드를 통한 수동 설치 또는 개발 환경 구축
- 확장 생성 예시
CREATE EXTENSION pg_lake CASCADE;
- 관련 확장: pg_lake_table, pg_lake_engine, pg_extension_base, pg_lake_iceberg, pg_lake_copy
-
pgduck_server
- Postgres 와이어 프로토콜을 구현한 독립 프로세스로, 내부적으로 DuckDB를 사용
- 기본 포트 5332에서 동작하며 psql로 직접 접속 가능
- 주요 설정
-
--memory_limit: 메모리 제한 (기본 시스템 메모리의 80%)
-
--init_file_path: 시작 시 실행할 SQL 파일 지정
-
--cache_dir: 원격 파일 캐시 디렉터리 지정
-
S3 연결 설정
사용 예시
아키텍처
- 구성 요소
-
PostgreSQL + pg_lake 확장
-
pgduck_server (DuckDB 실행 및 Postgres 프로토콜 구현)
- 동작 방식
- 사용자는 Postgres에 접속해 SQL 실행
- 쿼리 일부는 DuckDB를 통해 병렬·컬럼 지향 방식으로 실행
- DuckDB를 Postgres 프로세스 내부에 임베드하지 않아 스레드·메모리 안전성 문제 회피
- 표준 Postgres 클라이언트를 통해 DuckDB 엔진에 직접 접근 가능
구성 요소 세부 목록
-
pg_lake_iceberg: Iceberg 스펙 구현
-
pg_lake_table: 객체 스토리지 파일용 FDW 구현
-
pg_lake_copy: 데이터 레이크로 COPY 입출력 지원
-
pg_lake_engine: 공통 모듈
-
pg_extension_base: 다른 확장의 기반 구성요소
-
pg_extension_updater: 확장 자동 업데이트 기능
-
pg_lake_benchmark: 레이크 테이블 벤치마크 수행
-
pg_map: 일반화된 map 타입 생성기
-
pgduck_server: DuckDB를 로드해 Postgres 프로토콜로 노출하는 서버
-
duckdb_pglake: DuckDB에 Postgres 호환 함수 추가
개발 및 공개 이력
- 2024년 초 Crunchy Data에서 Iceberg를 Postgres에 도입하기 위해 개발 시작
- 초기에는 DuckDB 통합 및 Crunchy Bridge 고객 대상 기능 제공
- 이후 Iceberg v2 프로토콜과 트랜잭션 지원 구현
- 2024년 11월 Crunchy Data Warehouse로 재출시
- 2025년 6월 Snowflake가 Crunchy Data 인수, 2025년 11월 pg_lake 오픈소스 공개
- 초기 버전은 3.0 (이전 두 세대 포함)
- 기존 Crunchy Data Warehouse 사용자는 자동 업그레이드 경로 제공
라이선스 및 의존성
-
Apache 2.0 라이선스
-
Apache Avro 및 DuckDB 프로젝트에 의존
- 빌드 시 Avro 및 DuckDB 확장에 패치 적용
- 원본 라이선스는 각 프로젝트의 조건을 유지해야 함
문서
- 전체 문서는 docs 디렉터리에서 제공
- 추가 정보 외 언급 없음