LLM WikiAccess-protected knowledge portal

WIKI

Apache Paimon 2.0: Variant 타입·REST 카탈로그·벡터 인덱스로 스트리밍 레이크하우스를 AI 시대로 확장한 방법

요약 Apache Paimon 2.0.0은 2026년 8월 7일에 공개된 메이저 버전으로, Python 패키지 PyPaimon 2.0.0과 함께 출시되었다. 1.x 계열이 스트리밍 배치 통합 레이크하우스 포맷의 기초를 다졌다면, 2.0은 반정형 데이터 Variant 타입 , Iceberg REST 카탈로그 호환, 벡터 검색, AI 프레임워크 통합 PyPaimon 을 한데 묶어 데이터 레이크를 AI 워크로드의 직접 저장·검색 계

경로human/study/content/database-frontier/144-apache-paimon-2-0-variant-rest-catalog-vector-streaming-lakehouse.md
카테고리Study
태그#ai-review #catalog #lakehouse #mysql #rest #streaming #study #vector

요약

Apache Paimon 2.0.0은 2026년 8월 7일에 공개된 메이저 버전으로, Python 패키지 PyPaimon 2.0.0과 함께 출시되었다. 1.x 계열이 스트리밍-배치 통합 레이크하우스 포맷의 기초를 다졌다면, 2.0은 반정형 데이터(Variant 타입), Iceberg REST 카탈로그 호환, 벡터 검색, AI 프레임워크 통합(PyPaimon)을 한데 묶어 데이터 레이크를 AI 워크로드의 직접 저장·검색 계층으로 끌어올렸다.

Paimon 1.x 복습: LSM 기반 스트리밍 레이크하우스

Paimon의 핵심은 LSM(Log-Structured Merge-tree) 구조를 레이크하우스 포맷에 적용한다는 점이다. 이 덕분에 Flink에서 스트리밍으로 쓰고 Spark·Trino·DuckDB에서 배치로 읽는 하나의 테이블 포맷이 가능하다. 1.x의 주요 개념을 간략히 정리하면:

개념설명
Primary Key TableLSM으로 병합 처리; Merge Engine으로 upsert/partial-update/aggregation 지원
Append Table변경 없이 순수 추가; 소형 파일 자동 병합
Changelog Producerlookup/full-compaction 방식으로 변경 로그 생성
Deletion VectorMerge-on-Read 방식으로 대규모 업데이트를 효율적으로 처리

2.0의 신기능은 이 기반 위에 추가된다.

Variant 타입: 반정형 JSON을 레이크하우스 1급 시민으로

AI 파이프라인은 구조가 가변적인 JSON을 대량으로 다룬다. LLM 출력, 이벤트 로그, API 응답 등은 스키마가 미리 고정되기 어렵다. Paimon 2.0의 Variant 타입은 이 요구를 직접 지원한다.

두 가지 저장 레이아웃

Variant 타입은 저장 방식을 두 가지로 선택할 수 있다:

Plain 레이아웃: JSON을 별도 파싱 없이 바이너리 인코딩으로 저장한다. 쓰기가 빠르고 스키마 변경에 유연하다. 쿼리 시 전체 컬럼을 읽은 뒤 경로를 추출한다.

Shredded 레이아웃: 자주 쓰이는 경로를 별도 컬럼으로 분리(shredding)하여 물리적으로 저장한다. 특정 경로 접근 시 전체 JSON을 읽지 않아도 되므로 분석 쿼리가 빨라진다.

운영 예시

-- Paimon 테이블에 Variant 컬럼 추가
CREATE TABLE events (
  id BIGINT,
  ts TIMESTAMP,
  payload VARIANT
) WITH (
  'bucket' = '4',
  'primary-key' = 'id'
);

-- JSON 경로 추출 쿼리 (Spark/Flink SQL)
SELECT id, payload:$.model, payload:$.latency_ms
FROM events
WHERE payload:$.status = 'ok';

경로 추출($.field), CAST, 조건 필터링(predicate filtering)이 엔진 레벨에서 지원된다.

Plain 레이아웃
JSON 바이너리 1열 저장
쓰기 빠름 · 유연
쿼리 시 전체 읽기
비정형 데이터 수집
스키마 미확정 단계
Shredded 레이아웃
자주 쓰는 경로 → 별도 컬럼
나머지 → 잔여 바이너리
경로 쿼리 빠름
반복 분석 워크로드
핫 경로 명확히 파악된 경우
Variant 타입 저장 레이아웃 비교

REST 카탈로그와 Iceberg 호환 모드

Paimon은 1.2부터 Iceberg 호환 스냅샷 생성을 지원했다. 2.0에서는 이 기능이 REST 카탈로그 통합으로 완성된다.

-- metadata.iceberg.storage = 'rest-catalog' 설정 시
-- Paimon 테이블이 Iceberg REST 카탈로그에도 자동 등록된다
CREATE TABLE orders (
  order_id BIGINT,
  amount DECIMAL(10,2),
  ...
) WITH (
  'metadata.iceberg.storage' = 'rest-catalog',
  'metadata.iceberg.rest-catalog.uri' = 'http://catalog:8181',
  ...
);

이 설정이 활성화되면:

엔진 이중 서빙이 가능해진다. Flink는 Paimon API로 스트리밍 쓰기를 계속하면서, Spark·Trino·DuckDB는 Iceberg 경로로 읽는 구성이 가능하다.

Apache Fluss 연동: 스트림 버퍼와 레이크하우스의 결합

Apache Fluss는 Flink 에코시스템 하에서 개발 중인 서브초(sub-second) 스트림 저장 엔진이다. Paimon 2.0은 Fluss와의 공식 연동 경로를 제공한다.

스트리밍 계층 (Fluss)
데이터 소스
(Kafka / CDC)
Fluss
서브초 스트림
스토리지
Flink 스트리밍 쿼리
↓ 자동 티어링
레이크하우스 계층 (Paimon 2.0)
Paimon 테이블
LSM + Variant
Iceberg REST
카탈로그
Spark / Trino
배치 분석
AI 계층 (PyPaimon)
벡터 인덱스
BM25 + HNSW
PyTorch / Ray
학습 데이터
RAG / 피처 스토어
Fluss + Paimon 스트리밍 레이크하우스 아키텍처

벡터 인덱스와 전문 검색: AI 데이터 서빙 계층으로

Paimon 2.0의 AI 지향 설계에서 가장 주목할 부분이다. 테이블에 벡터 컬럼과 인덱스를 직접 정의할 수 있다.

-- 벡터 컬럼 정의 및 BM25 전문 검색 인덱스
CREATE TABLE documents (
  id BIGINT,
  content STRING,
  embedding VECTOR(1536),
  metadata VARIANT,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'bucket' = '8',
  'index.vector.type' = 'hnsw',
  'index.search.type' = 'bm25'
);

HNSW 벡터 인덱스BM25 전문 검색을 하나의 테이블에서 지원함으로써, RAG(Retrieval-Augmented Generation) 파이프라인에서 별도의 벡터 DB(Qdrant, Milvus 등)를 추가하지 않고 Paimon 테이블 하나로 하이브리드 검색을 구성할 수 있다.

Open question: 벡터 인덱스의 재구성(reindex) 비용, HNSW 파라미터 튜닝 가이드라인, 대규모(1B+ 벡터) 운영 사례는 아직 공식 문서에 상세히 다루어지지 않았다.

PyPaimon: AI 프레임워크와의 직접 통합

PyPaimon 2.0.0은 Python 생태계에서 Paimon 테이블을 직접 다루는 공식 패키지다. pip install pypaimon으로 설치한다.

import pypaimon as pm

# 카탈로그 연결
catalog = pm.create_catalog({
    'type': 'filesystem',
    'warehouse': 's3://my-warehouse/paimon'
})

# 테이블 읽기 → PyTorch DataLoader
table = catalog.get_table('ai_db', 'embeddings')
reader = table.new_read_builder() \
    .with_filter('updated_at >= 2026-08-01') \
    .new_scan() \
    .to_split_reader()

# Ray Data 연동
import ray
ds = ray.data.from_paimon(table)

Ray와 PyTorch와의 직접 통합을 통해 Spark 없이 Python 워크플로우에서 Paimon 데이터를 AI 학습에 활용할 수 있다.

운영 체크리스트

2.0 업그레이드 또는 신규 도입 전 확인 사항:

Paimon 1.3 vs 2.0 핵심 차이 요약

기능1.32.0
Variant 타입✅ Plain/Shredded
REST 카탈로그 통합✅ GA
벡터 인덱스✅ HNSW
BM25 전문 검색
PyPaimon0.x 실험적2.0.0 GA
Fluss 공식 연동
Iceberg 스냅샷 생성기본REST 카탈로그 통합

References