Postgres에서 Iceberg 및 데이터 레이크 접근을 지원하는 Pg_lake

3 days ago 5

  • 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">s3://testbucketpglake';

사용 예시

아키텍처

  • 구성 요소
    • 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 AvroDuckDB 프로젝트에 의존
    • 빌드 시 Avro 및 DuckDB 확장에 패치 적용
    • 원본 라이선스는 각 프로젝트의 조건을 유지해야 함

문서

  • 전체 문서는 docs 디렉터리에서 제공
  • 추가 정보 외 언급 없음

Read Entire Article