

# Apache Iceberg V3 작업
<a name="working-with-apache-iceberg-v3"></a>

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

AWS는 Apache Iceberg 버전 3(V3) 사양에 정의된 대로 삭제 벡터 및 행 계보에 대한 지원을 제공합니다. 이러한 기능은 [Amazon S3 Tables](https://aws.amazon.com/s3/features/tables/)를 포함하여 [Amazon EMR 7.12](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-emr.html)의 Apache Spark, [AWS Glue ETL](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/iceberg-glue.html), [Amazon SageMaker Unified Studio Notebooks](https://docs.aws.amazon.com/next-generation-sagemaker/) 및 [AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)의 Apache Iceberg 테이블에서 사용할 수 있습니다.

## V3의 주요 기능
<a name="key-features-v3"></a>

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

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

## 버전 호환성
<a name="version-compatibility"></a>

V3는 V2 테이블과의 이전 버전과의 호환성을 유지합니다. AWS 서비스는 V2 및 V3 테이블을 동시에 지원하므로 다음을 수행할 수 있습니다.
+ V2 및 V3 테이블 모두에서 쿼리 실행
+ 데이터 재작성 없이 기존 V2 테이블을 V3로 업그레이드
+ V2 및 V3 스냅샷에 걸쳐 시간 이동 쿼리 실행
+ 테이블 버전 간에 스키마 진화 및 숨겨진 파티셔닝 사용

**중요**  
V3는 단방향 업그레이드입니다. 테이블이 V2에서 V3로 업그레이드되면 표준 작업을 통해 다시 V2로 다운그레이드할 수 없습니다.

## V3 시작하기
<a name="getting-started-v3"></a>

### 사전 조건
<a name="prerequisites"></a>

V3 테이블로 작업하기 전에 다음을 확인해야 합니다.
+ AWS 계정 및 적절한 IAM 권한.
+ 하나 이상의 AWS 분석 서비스(EMR, Glue, Amazon SageMaker Unified Studio 노트북 또는 S3 Tables)에 대한 액세스
+ 테이블 데이터 및 메타데이터를 저장하기 위한 S3 버킷
+ S3 Tables를 시작하기 위한 테이블 버킷 또는 자체 Iceberg 인프라를 구축하는 경우 범용 S3 버킷
+ 구성된 AWS Glue 카탈로그

### V3 테이블 생성
<a name="creating-v3-tables"></a>

#### 새 V3 테이블 생성
<a name="creating-new-v3-tables"></a>

새 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로 업그레이드
<a name="upgrading-v2-to-v3"></a>

데이터를 다시 작성하지 않고도 기존 V2 테이블을 V3로 원자적으로 업그레이드할 수 있습니다.

**Spark SQL 사용:**

```
ALTER TABLE myns.existing_table  
SET TBLPROPERTIES ('format-version' = '3')
```

**중요**  
V3는 단방향 업그레이드입니다. 테이블이 V2에서 V3로 업그레이드되면 표준 작업을 통해 다시 V2로 다운그레이드할 수 없습니다.

**업그레이드 중에 발생하는 일:**
+ 새 메타데이터 스냅샷이 원자적으로 생성됨
+ 기존 Parquet 데이터 파일이 재사용됨
+ 행 계보 필드가 테이블 메타데이터에 추가됨
+ 다음 압축이 이전 V2 삭제 파일을 제거
+ 새 수정 사항이 V3의 Deletion Vector 파일을 사용
+ 업그레이드는 행 계보 변경 추적 레코드의 과거 채우기를 수행하지 않습니다.

### 삭제 벡터 활성화
<a name="enabling-deletion-vectors"></a>

업데이트, 삭제 및 병합에 삭제 벡터를 활용하려면 쓰기 모드를 구성합니다.

**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'  
                  )
```

이러한 설정은 업데이트, 삭제 및 병합 작업이 전체 데이터 파일을 다시 작성하는 대신 삭제 벡터 파일을 생성하도록 합니다.

### 변경 추적을 위한 행 계보 활용
<a name="leveraging-row-lineage"></a>

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
```

\$1row\$1id 필드는 각 행을 고유하게 식별하는 반면, \$1last\$1updated\$1sequence\$1number는 행이 마지막으로 수정된 시점을 추적합니다. 다음 필드를 사용하여 다음을 수행할 수 있습니다.
+ 증분 처리를 위해 변경된 행 식별
+ 규정 준수를 위한 데이터 리니지 추적
+ CDC 파이프라인 최적화
+ 변경 사항만 처리하여 컴퓨팅 비용 절감

## V3의 모범 사례
<a name="best-practices-v3"></a>

### V3를 사용해야 하는 경우
<a name="when-to-use-v3"></a>

다음과 같은 경우 V3로 업그레이드하거나 V3로 시작하는 것이 좋습니다.
+ 배치 업데이트 또는 삭제를 자주 수행
+ GDPR 또는 규정 준수 삭제 요구 사항을 충족해야 함
+ 워크로드에 잦은 업서트 포함
+ 효율적인 CDC 워크플로 필요
+ 작은 파일에서 스토리지 비용을 줄여야 함
+ 더 나은 변경 추적 기능이 필요

### 쓰기 성능 최적화
<a name="optimizing-write-performance"></a>
+ 업데이트가 많은 워크로드에 대해 삭제 벡터 활성화:

  ```
  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  
  )
  ```

### 읽기 성능 최적화
<a name="optimizing-read-performance"></a>
+ 증분 처리를 위한 행 계보 활용
+ 복사하지 않고 시간 이동을 사용하여 기록 데이터에 액세스
+ 더 나은 쿼리 계획을 위해 통계 수집 활성화

## 마이그레이션 전략
<a name="migration-strategy"></a>

V2에서 V3로 마이그레이션하는 경우:
+ 비프로덕션 우선 테스트 - 업그레이드 프로세스 및 성능 검증
+ 활동이 적은 기간 동안 업그레이드 - 동시 작업에 미치는 영향 최소화
+ 초기 성능 모니터링 - 업그레이드 후 지표 추적
+ 압축 실행 - 업그레이드 후 삭제 파일 통합
+ 설명서 업데이트 - 팀 설명서의 V3 기능 반영

## 호환성 고려 사항
<a name="compatibility-considerations"></a>
+ 엔진 버전 - 테이블에 액세스하는 모든 엔진이 V3를 지원하는지 확인
+ 타사 도구 - 업그레이드하기 전에 V3 호환성 확인
+ 백업 전략 - 스냅샷 기반 복구 절차 테스트
+ 모니터링 - V3별 지표에 대한 모니터링 대시보드 업데이트

## 문제 해결
<a name="troubleshooting"></a>

### 공통 문제
<a name="common-issues"></a>

오류: "형식-버전 3이 지원되지 않음"  
+ 엔진 버전이 V3를 지원하는지 확인

  Amazon AWS 서비스에 대한 V3 지원은 다음과 같습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/working-with-apache-iceberg-v3.html)
+ 카탈로그 호환성 확인
+ 최신 AWS 서비스 버전 확인

업그레이드 후 성능 저하  
+ 압축 실패가 없는지 확인합니다. 자세한 내용은 [S3 Tables에 대한 로깅 및 모니터링](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-monitoring-overview.html)을 참조하세요.
+ 삭제 벡터가 활성화되어 있는지 확인합니다. 다음과 같은 속성이 설정되었는지 확인합니다.

  ```
  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 지원 타임라인에 대한 문의 도구 공급업체

### 도움말 보기
<a name="getting-help"></a>
+ AWS 지원: 서비스별 문제는 AWS Support에 문의하세요.
+ Apache Iceberg 커뮤니티: Iceberg Slack
+ AWS 설명서: AWS 분석 설명서

## 가격 책정
<a name="pricing"></a>
+ Amazon EMR: [컴퓨팅 및 스토리지 요금](https://aws.amazon.com/emr/pricing/)
+ [Amazon SageMaker 요금](https://aws.amazon.com/sagemaker/pricing/)
+ AWS Glue: [작업 실행 및 데이터 카탈로그 요금](https://aws.amazon.com/glue/pricing/)
+ S3 Tables: [스토리지 및 요청 요금](https://aws.amazon.com/s3/pricing/)

## 가용성
<a name="availability"></a>

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

## 추가 리소스
<a name="additional-resources"></a>
+ [Apache Iceberg V3 설명서](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/introduction.html)
+ [마이그레이션 모범 사례](https://aws.amazon.com/solutions/guidance/migrating-tabular-data-from-amazon-s3-to-s3-tables/)
+ [시작 안내서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-getting-started.html)