Apache Iceberg V3 작업
Apache Iceberg 버전 3(V3)은 Apache Iceberg 테이블 형식 사양의 최신 버전으로, 성능이 향상되고 운영 오버헤드가 줄어 페타바이트 규모의 데이터 레이크를 빌드하기 위한 고급 기능을 도입했습니다. V3는 특히 배치 업데이트 및 규정 준수 삭제와 관련하여 V2에서 발생하는 일반적인 성능 병목 현상을 해결합니다.
AWS는 Apache Iceberg 버전 3(V3) 사양에 정의된 대로 삭제 벡터 및 행 계보에 대한 지원을 제공합니다. 이러한 기능은 Amazon S3 Tables
V3의 주요 기능
- 삭제 벡터
-
V2의 위치 삭제 파일을 Puffin 파일로 저장된 효율적인 바이너리 형식으로 바꿉니다. 이렇게 하면 무작위 배치 업데이트 및 GDPR 규정 준수 삭제로 인한 쓰기 증폭이 제거되므로 새로운 데이터를 유지 관리하는 데 드는 오버헤드가 크게 줄어듭니다. 잦은 업데이트를 처리하는 조직은 쓰기 성능이 즉시 향상되며 파일 수가 작아 스토리지 비용이 절감됩니다.
- 행 계보
-
행 수준에서 정확한 변경 내용 추적을 활성화합니다. 다운스트림 시스템은 변경 사항을 점진적으로 처리하여 데이터 파이프라인 속도를 높이고 변경 데이터 캡처(CDC) 워크플로의 컴퓨팅 비용을 절감할 수 있습니다. 이 내장 기능을 사용하면 사용자 지정 변경 추적 구현이 필요하지 않습니다.
버전 호환성
V3는 V2 테이블과의 이전 버전과의 호환성을 유지합니다. AWS 서비스는 V2 및 V3 테이블을 동시에 지원하므로 다음을 수행할 수 있습니다.
-
V2 및 V3 테이블 모두에서 쿼리 실행
-
데이터 재작성 없이 기존 V2 테이블을 V3로 업그레이드
-
V2 및 V3 스냅샷에 걸쳐 시간 이동 쿼리 실행
-
테이블 버전 간에 스키마 진화 및 숨겨진 파티셔닝 사용
중요
V3는 단방향 업그레이드입니다. 테이블이 V2에서 V3로 업그레이드되면 표준 작업을 통해 다시 V2로 다운그레이드할 수 없습니다.
V3 시작하기
사전 조건
V3 테이블로 작업하기 전에 다음을 확인해야 합니다.
-
AWS 계정 및 적절한 IAM 권한.
-
하나 이상의 AWS 분석 서비스(EMR, Glue, Amazon SageMaker Unified Studio 노트북 또는 S3 Tables)에 대한 액세스
-
테이블 데이터 및 메타데이터를 저장하기 위한 S3 버킷
-
S3 Tables를 시작하기 위한 테이블 버킷 또는 자체 Iceberg 인프라를 구축하는 경우 범용 S3 버킷
-
구성된 AWS Glue 카탈로그
V3 테이블 생성
새 V3 테이블 생성
새 Iceberg V3 테이블을 생성하려면 형식 버전 테이블 속성을 3으로 설정합니다.
Spark SQL 사용:
CREATE TABLE IF NOT EXISTS myns.orders_v3 ( order_id bigint, customer_id string, order_date date, total_amount decimal(10,2), status string, created_at timestamp ) USING iceberg TBLPROPERTIES ( 'format-version' = '3' )
V2 테이블을 V3로 업그레이드
데이터를 다시 작성하지 않고도 기존 V2 테이블을 V3로 원자적으로 업그레이드할 수 있습니다.
Spark SQL 사용:
ALTER TABLE myns.existing_table SET TBLPROPERTIES ('format-version' = '3')
중요
V3는 단방향 업그레이드입니다. 테이블이 V2에서 V3로 업그레이드되면 표준 작업을 통해 다시 V2로 다운그레이드할 수 없습니다.
업그레이드 중에 발생하는 일:
-
새 메타데이터 스냅샷이 원자적으로 생성됨
-
기존 Parquet 데이터 파일이 재사용됨
-
행 계보 필드가 테이블 메타데이터에 추가됨
-
다음 압축이 이전 V2 삭제 파일을 제거
-
새 수정 사항이 V3의 Deletion Vector 파일을 사용
-
업그레이드는 행 계보 변경 추적 레코드의 과거 채우기를 수행하지 않습니다.
삭제 벡터 활성화
업데이트, 삭제 및 병합에 삭제 벡터를 활용하려면 쓰기 모드를 구성합니다.
Spark SQL 사용:
ALTER TABLE myns.orders_v3 SET TBLPROPERTIES ('format-version' = '3', 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' )
이러한 설정은 업데이트, 삭제 및 병합 작업이 전체 데이터 파일을 다시 작성하는 대신 삭제 벡터 파일을 생성하도록 합니다.
변경 추적을 위한 행 계보 활용
V3는 행 계보 메타데이터 필드를 자동으로 추가하여 변경 사항을 추적합니다.
Spark SQL 사용:
# Query with parameter value provided last_processed_sequence = 47 SELECT id, data, _row_id, _last_updated_sequence_number FROM myns.orders_v3 WHERE _last_updated_sequence_number > :last_processed_sequence
_row_id 필드는 각 행을 고유하게 식별하는 반면, _last_updated_sequence_number는 행이 마지막으로 수정된 시점을 추적합니다. 다음 필드를 사용하여 다음을 수행할 수 있습니다.
-
증분 처리를 위해 변경된 행 식별
-
규정 준수를 위한 데이터 리니지 추적
-
CDC 파이프라인 최적화
-
변경 사항만 처리하여 컴퓨팅 비용 절감
V3의 모범 사례
V3를 사용해야 하는 경우
다음과 같은 경우 V3로 업그레이드하거나 V3로 시작하는 것이 좋습니다.
-
배치 업데이트 또는 삭제를 자주 수행
-
GDPR 또는 규정 준수 삭제 요구 사항을 충족해야 함
-
워크로드에 잦은 업서트 포함
-
효율적인 CDC 워크플로 필요
-
작은 파일에서 스토리지 비용을 줄여야 함
-
더 나은 변경 추적 기능이 필요
쓰기 성능 최적화
-
업데이트가 많은 워크로드에 대해 삭제 벡터 활성화:
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
적절한 파일 크기를 구성합니다.
SET TBLPROPERTIES ( 'write.target-file-size-bytes' = '536870912' — 512 MB )
읽기 성능 최적화
-
증분 처리를 위한 행 계보 활용
-
복사하지 않고 시간 이동을 사용하여 기록 데이터에 액세스
-
더 나은 쿼리 계획을 위해 통계 수집 활성화
마이그레이션 전략
V2에서 V3로 마이그레이션하는 경우:
-
비프로덕션 우선 테스트 - 업그레이드 프로세스 및 성능 검증
-
활동이 적은 기간 동안 업그레이드 - 동시 작업에 미치는 영향 최소화
-
초기 성능 모니터링 - 업그레이드 후 지표 추적
-
압축 실행 - 업그레이드 후 삭제 파일 통합
-
설명서 업데이트 - 팀 설명서의 V3 기능 반영
호환성 고려 사항
-
엔진 버전 - 테이블에 액세스하는 모든 엔진이 V3를 지원하는지 확인
-
타사 도구 - 업그레이드하기 전에 V3 호환성 확인
-
백업 전략 - 스냅샷 기반 복구 절차 테스트
-
모니터링 - V3별 지표에 대한 모니터링 대시보드 업데이트
문제 해결
공통 문제
- 오류: "형식-버전 3이 지원되지 않음"
-
-
엔진 버전이 V3를 지원하는지 확인
Amazon AWS 서비스에 대한 V3 지원은 다음과 같습니다.
Service V3 지원 EMR Spark 릴리스 7.12+ AWS Glue ETL 예 Amazon SageMaker Unified Studio 노트북 예 AWS Glue: Iceberg REST API, 테이블 유지 관리 예 Amazon S3 Tables: Iceberg REST API, 테이블 유지 관리 예 Amazon Athena(Trino) 아니요 -
카탈로그 호환성 확인
-
최신 AWS 서비스 버전 확인
-
- 업그레이드 후 성능 저하
-
-
압축 실패가 없는지 확인합니다. 자세한 내용은 S3 Tables에 대한 로깅 및 모니터링을 참조하세요.
-
삭제 벡터가 활성화되어 있는지 확인합니다. 다음과 같은 속성이 설정되었는지 확인합니다.
SET TBLPROPERTIES ( 'write.delete.mode' = 'merge-on-read', 'write.update.mode' = 'merge-on-read', 'write.merge.mode' = 'merge-on-read' ) -
다음 코드를 사용하여 테이블 속성을 확인할 수 있습니다.
DESCRIBE FORMATTED myns.orders_v3 -
파티션 전략을 검토합니다. 파티셔닝을 초과하면 작은 파일이 발생할 수 있습니다. 아래 쿼리를 실행하여 테이블의 평균 파일 크기를 가져옵니다.
SELECT avg(file_size_in_bytes) as avg_file_size_bytes FROM myns.orders_v3.files
-
- 타사 도구와의 비호환성
-
-
V3 사양을 지원하는 도구 확인
-
지원되지 않는 도구에 대한 V2 테이블 유지 관리 고려
-
V3 지원 타임라인에 대한 문의 도구 공급업체
-
도움말 보기
-
AWS 지원: 서비스별 문제는 AWS Support에 문의하세요.
-
Apache Iceberg 커뮤니티: Iceberg Slack
-
AWS 설명서: AWS 분석 설명서
가격 책정
-
Amazon EMR: 컴퓨팅 및 스토리지 요금
-
AWS Glue: 작업 실행 및 데이터 카탈로그 요금
-
S3 Tables: 스토리지 및 요청 요금
가용성
Apache Iceberg V3 지원은 Amazon EMR, AWS Glue Data Catalog, AWS Glue ETL 및 S3 Tables가 운영되는 모든 AWS 리전에서 사용할 수 있습니다.