Tools/Iceberg

Iceberg에서 Tagging을 활용한 데이터 Snapshot 관리

칼쵸쵸 2025. 7. 31. 22:28

1. Iceberg에서 Tagging의 개념

Iceberg의 Tag는 특정 시점의 스냅샷을 이름 기반으로 고정 보존할 수 있는 기능입니다.

  • 스냅샷: 테이블의 특정 시점 상태 (데이터 파일 목록 + 메타데이터)
  • 태그(Tag): 스냅샷에 붙이는 사용자 정의 라벨
  • 목적: 보존(retention) 정책에서 제외하거나, 특정 분석/재처리를 위해 고정 시점 참조
ALTER TABLE db.table 
CREATE TAG `month_end_202507` 
AS OF VERSION 4151342690114749344 
RETAIN 365 DAYS;

 

  • AS OF VERSION : 특정 스냅샷 버전 지정
  • RETAIN : 이 태그를 최소 며칠 동안 보존할지 설정 (만료 보호 기간)

 

2. Expire Snapshots와 Tagging의 상호작용

보통 Iceberg 테이블은 expire_snapshots 명령어를 주기적으로 실행하여
오래된 스냅샷과 관련 파일(데이터, 매니페스트)을 정리합니다.

 
ALTER TABLE db.table 
EXECUTE expire_snapshots(retention_threshold => '7d');

 

동작 원리

  • retention_threshold보다 오래된 스냅샷을 삭제
  • 단, Tag나 Branch가 참조 중인 스냅샷은 삭제 제외

즉, 태그가 달린 스냅샷은 expire 대상에서 제외됩니다.

 

3. 태그 기반 Expire 제외 전략

대표 시점 보존

  • 월말/분기말/연말 등 대표 시점 스냅샷에 태그를 걸어 보존
  • 일반 스냅샷은 7일~30일 단위로 expire
  • 태그가 붙은 스냅샷만 장기 보존 (예: 1년)
-- 매일 만료 실행 (최근 7일 유지)
ALTER TABLE db.table EXECUTE expire_snapshots(retention_threshold => '7d');

-- 월말 스냅샷 보존
ALTER TABLE db.table 
CREATE TAG `month_end_202507` 
AS OF VERSION <snapshot_id> 
RETAIN 365 DAYS;

 

4. Trino에서 태그 기반 조회

Trino는 Iceberg tag name을 직접 지정할 수 있습니다.

SELECT *
FROM table_name
FOR VERSION AS OF 'month_end_202507';

 

 

  • 'month_end_202507' → snapshot_id가 아니라 태그명 (문자열 일시)
  • Trino 엔진이 Iceberg 메타스토어에서 해당 태그가 가리키는 snapshot_id를 찾아서 실행

 

반응형