View a markdown version of this page

Apache Iceberg V3 작업 - Amazon Simple Storage Service

Apache Iceberg V3 작업

Apache Iceberg 버전 3(V3)은 Apache Iceberg 테이블 형식 사양의 최신 버전으로, 성능이 향상되고 운영 오버헤드가 줄어 페타바이트 규모의 데이터 레이크를 빌드하기 위한 고급 기능을 도입했습니다. V3는 특히 배치 업데이트 및 규정 준수 삭제와 관련하여 버전 2(V2)에서 발생하는 일반적인 성능 병목 현상을 해결합니다.

AWS는 Apache Iceberg 버전 3(V3) 사양에 정의된 삭제 벡터, 행 계보, 변형 데이터 유형에 대한 지원을 제공합니다. 이러한 기능은 Amazon S3 Tables를 포함하여 Amazon EMR의 Apache Spark, AWS Glue ETL, Amazon SageMaker Unified Studio Notebooks, AWS Glue Data Catalog의 Apache Iceberg 테이블에서 사용할 수 있습니다. 변형 데이터 유형은 S3 Tables에 전용입니다.

V3의 주요 기능

삭제 벡터

V2의 위치 삭제 파일을 Puffin 파일로 저장된 효율적인 바이너리 형식으로 바꿉니다. 이렇게 하면 무작위 배치 업데이트 및 GDPR 규정 준수 삭제로 인한 쓰기 증폭이 제거되므로 새로운 데이터를 유지 관리하는 데 드는 오버헤드가 크게 줄어듭니다. 잦은 업데이트를 처리하는 조직은 쓰기 성능이 즉시 향상되며 파일 수가 작아 스토리지 비용이 절감됩니다.

행 계보

행 수준에서 정확한 변경 내용 추적을 활성화합니다. 다운스트림 시스템은 변경 사항을 점진적으로 처리하여 데이터 파이프라인 속도를 높이고 변경 데이터 캡처(CDC) 워크플로의 컴퓨팅 비용을 절감할 수 있습니다. 이 내장 기능을 사용하면 사용자 지정 변경 추적 구현이 필요하지 않습니다.

변형 데이터 유형

변형 데이터 유형을 사용하면 고정된 스키마를 미리 정의하지 않고도 Iceberg 테이블에서 JSON과 같은 반정형 데이터를 직접 작성할 수 있습니다. V3 호환 엔진은 반정형 데이터를 작성할 때 이를 숨겨진 열로 분해하여 쿼리 엔진이 파일 정리와 같은 최적화에 사용하는 Parquet 열 통계를 생성합니다. 이렇게 하면 분석 쿼리가 스캔하는 데이터가 줄어듭니다. S3 Tables는 압축을 포함하여 변형 열에 대한 지속적인 테이블 유지 관리를 제공하므로 반정형 소스의 데이터를 Iceberg 엔진이 효율적으로 읽을 수 있는 더 큰 파일로 통합할 수 있습니다.

버전 호환성

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 파이프라인 최적화

  • 변경 사항만 처리하여 컴퓨팅 비용 절감

변형 데이터 유형 사용

중요

변형 데이터 유형은 특정 AWS 리전에서만 사용할 수 있습니다. 지원되는 리전의 전체 목록은 가용성 섹션을 참조하세요.

변형 데이터 유형을 사용하면 고정된 스키마를 미리 정의하지 않고도 Iceberg 테이블에 JSON과 같은 반정형 데이터를 직접 쓸 수 있습니다. 효율적인 분석 쿼리 성능을 유지하면서 더 빠르게 데이터를 쓸 수 있습니다. Iceberg V3 호환 엔진은 반정형 데이터를 작성할 때 이를 숨겨진 열로 분해합니다. 이러한 숨겨진 열은 쿼리 엔진이 파일 정리와 같은 최적화에 사용하는 Parquet 열 통계를 생성합니다.

Spark SQL을 사용하여 변형 열이 있는 테이블 생성:

CREATE TABLE IF NOT EXISTS myns.events ( event_id bigint, event_timestamp timestamp, source string, event_data VARIANT ) USING iceberg TBLPROPERTIES ( 'format-version' = '3' )

변형 열에 반정형 데이터 삽입:

INSERT INTO myns.events VALUES ( 1, current_timestamp(), 'web-app', PARSE_JSON('{"user_id": "u-1234", "action": "page_view", "page": "/products", "duration_ms": 350}') ); INSERT INTO myns.events VALUES ( 2, current_timestamp(), 'mobile-app', PARSE_JSON('{"user_id": "u-5678", "action": "purchase", "items": [{"sku": "A100", "qty": 2}], "total": 49.99}') );

S3 Tables를 사용하면 압축을 포함하여 변형 열에 대한 테이블 유지 관리가 자동으로 실행됩니다. 압축은 작은 파일의 반정형 소스 데이터를 Iceberg 엔진이 효율적으로 읽을 수 있는 더 큰 파일로 통합하여 시간이 지남에 따라 쿼리 성능을 개선합니다.

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별 지표에 대한 모니터링 대시보드 업데이트

압축 고려 사항

압축은 기본적으로 분해된 변형 Parquet 파일을 씁니다. 분해 기능을 지원하지 않는 이전 리더는 압축된 파일을 읽지 못할 수 있습니다. 테이블 속성 write.variant.shredding.enabled=false를 설정하여 분해 기능을 비활성화할 수 있습니다.

문제 해결

공통 문제

오류: "형식-버전 3이 지원되지 않음"
  • 쿼리 엔진 카탈로그에서 Iceberg V3와의 호환성을 확인하세요.

  • 최신 AWS 서비스 버전을 사용하고 있는지 확인합니다.

  • 엔진 버전이 V3를 지원하는지 확인

    Amazon AWS 서비스에 대한 V3 지원은 다음과 같습니다.

    서비스 V3 지원 V3 변형 지원
    EMR Spark 릴리스 7.12+ 릴리스 8.0+
    AWS Glue ETL 아니요
    Amazon SageMaker Unified Studio 노트북 아니요
    AWS Glue: Iceberg REST API, 테이블 유지 관리 아니요
    Amazon S3 Tables: Iceberg REST API, 테이블 유지 관리 예*
    Amazon Athena(Trino) 아니요 아니요

    *부분적 리전 가용성

업그레이드 후 성능 저하
  • 압축 실패가 없는지 확인합니다. 자세한 내용은 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 분석 설명서

가격 책정

가용성

삭제 벡터 및 행 계보에 대한 Apache Iceberg V3 지원은 Amazon EMR, AWS Glue Data Catalog, AWS Glue ETL 및 S3 Tables가 운영되는 모든 AWS 리전에서 사용할 수 있습니다.

S3 Tables의 변형 데이터 유형은 다음 AWS 리전에서 사용할 수 있습니다. 미국 동부(버지니아 북부), 미국 동부(오하이오), 미국 서부(오리건), 아시아 태평양(뭄바이), 아시아 태평양(서울), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄), 캐나다(중부), 유럽(프랑크푸르트), 유럽(아일랜드), 유럽(런던), 유럽(파리), 유럽(스톡홀름), 남아메리카(상파울루).

추가 리소스