- 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 연결 설정
- DuckDB의 secrets manager를 사용해 AWS/GCP 자격 증명 자동 인식
- Iceberg 테이블 저장 위치 지정 예시
SET pg_lake_iceberg.default_location_prefix TO 's3://testbucketpglake';
사용 예시
-
Iceberg 테이블 생성
CREATE TABLE iceberg_test USING iceberg AS SELECT i as key, 'val_'|| i as val FROM generate_series(0,99)i;- 생성 후
SELECT count(*) FROM iceberg_test;결과 100 - Iceberg 메타데이터 위치 확인 가능
- 생성 후
-
S3로 COPY 입출력
COPY (SELECT * FROM iceberg_test) TO 's3://.../iceberg_test.parquet'; COPY iceberg_test FROM 's3://.../iceberg_test.parquet';- Parquet, CSV, JSON 형식 지원
-
S3 파일을 외부 테이블로 생성
CREATE FOREIGN TABLE parquet_table() SERVER pg_lake OPTIONS (path 's3://.../*.parquet');- 컬럼 자동 추론, 쿼리 가능 (
SELECT count(*) FROM parquet_table;→ 100)
- 컬럼 자동 추론, 쿼리 가능 (
아키텍처
- 구성 요소
- 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 확장에 패치 적용