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 워크로드의 직접 저장·검색 계층으로 끌어올렸다.
Paimon 1.x 복습: LSM 기반 스트리밍 레이크하우스
Paimon의 핵심은 LSM(Log-Structured Merge-tree) 구조를 레이크하우스 포맷에 적용한다는 점이다. 이 덕분에 Flink에서 스트리밍으로 쓰고 Spark·Trino·DuckDB에서 배치로 읽는 하나의 테이블 포맷이 가능하다. 1.x의 주요 개념을 간략히 정리하면:
| 개념 | 설명 |
|---|---|
| Primary Key Table | LSM으로 병합 처리; Merge Engine으로 upsert/partial-update/aggregation 지원 |
| Append Table | 변경 없이 순수 추가; 소형 파일 자동 병합 |
| Changelog Producer | lookup/full-compaction 방식으로 변경 로그 생성 |
| Deletion Vector | Merge-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)이 엔진 레벨에서 지원된다.
스키마 미확정 단계
핫 경로 명확히 파악된 경우
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',
...
);이 설정이 활성화되면:
- Paimon 네이티브 API로 읽고 쓸 수 있고
- 동시에 Iceberg REST 카탈로그(Nessie, Lakeformation, Unity Catalog 등)를 통해 Iceberg 클라이언트로도 접근 가능하다
엔진 이중 서빙이 가능해진다. Flink는 Paimon API로 스트리밍 쓰기를 계속하면서, Spark·Trino·DuckDB는 Iceberg 경로로 읽는 구성이 가능하다.
Apache Fluss 연동: 스트림 버퍼와 레이크하우스의 결합
Apache Fluss는 Flink 에코시스템 하에서 개발 중인 서브초(sub-second) 스트림 저장 엔진이다. Paimon 2.0은 Fluss와의 공식 연동 경로를 제공한다.
(Kafka / CDC)
서브초 스트림
스토리지
LSM + Variant
카탈로그
배치 분석
BM25 + HNSW
학습 데이터
벡터 인덱스와 전문 검색: 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 업그레이드 또는 신규 도입 전 확인 사항:
- [ ] Flink 2.0+ 또는 Spark 4.x 버전 호환성 확인 (2.0은 새 Flink/Spark API 활용)
- [ ] Variant 컬럼 사용 시 Plain vs Shredded 레이아웃 선택 기준 정의
- [ ] REST 카탈로그 통합 사용 시 Iceberg 메타데이터 스냅샷 보존 정책 설정
- [ ] 벡터 인덱스 사용 시 bucket 수와 HNSW 파라미터 계획 수립
- [ ] PyPaimon 2.0.0 설치 후 기존 1.x PyPaimon 코드 호환성 확인
- [ ] Fluss 연동 사용 시 Fluss 버전과 Paimon 2.0 커넥터 버전 일치 확인
Paimon 1.3 vs 2.0 핵심 차이 요약
| 기능 | 1.3 | 2.0 |
|---|---|---|
| Variant 타입 | ❌ | ✅ Plain/Shredded |
| REST 카탈로그 통합 | ❌ | ✅ GA |
| 벡터 인덱스 | ❌ | ✅ HNSW |
| BM25 전문 검색 | ❌ | ✅ |
| PyPaimon | 0.x 실험적 | 2.0.0 GA |
| Fluss 공식 연동 | ❌ | ✅ |
| Iceberg 스냅샷 생성 | 기본 | REST 카탈로그 통합 |
References
- https://github.com/apache/paimon/releases/tag/release-2.0.0 — Apache Paimon 2.0.0 Release (August 7, 2026)
- https://github.com/apache/paimon/issues/6866 — [Umbrella] Paimon 2.0 Planning
- https://paimon.apache.org/docs/master/iceberg/rest-catalog/ — Paimon REST Catalog documentation
- https://paimon.apache.org/docs/master/iceberg/overview/ — Paimon Iceberg Compatibility overview
- https://fluss.apache.org/docs/streaming-lakehouse/integrate-data-lakes/paimon/ — Apache Fluss + Paimon integration
- https://iceberglakehouse.com/posts/2026-05-24-paimon-vs-iceberg-mutable-streams/ — When Paimon Beats Iceberg for Mutable Streams (May 2026)