

# Iceberg 테이블 최적화
<a name="querying-iceberg-data-optimization"></a>

Athena는 Apache Iceberg 테이블에서 쿼리 성능을 개선하기 위한 몇 가지 최적화 기능을 제공합니다. 데이터가 누적되면 파일 처리 오버헤드가 증가하고 Iceberg 삭제 파일에 저장된 행 수준 삭제를 적용하는 계산 비용이 증가하여 쿼리의 효율성이 떨어질 수 있습니다. 이러한 문제를 해결하기 위해 Athena는 테이블 구조를 최적화하기 위해 수동 압축 및 vacuum 연산자를 지원합니다. 또한 Athena는 Iceberg 통계를 함께 사용하여 쿼리 실행 중에 정확한 데이터 정리를 위해 비용 기반 쿼리 최적화 및 Parquet 열 인덱싱을 활성화합니다. 이러한 기능은 함께 작동하여 쿼리 실행 시간을 줄이고 데이터 스캔을 최소화하며 비용을 절감합니다. 이 주제에서는 이러한 최적화 기능을 사용하여 Iceberg 테이블에서 고성능 쿼리를 유지 관리하는 방법을 설명합니다.

## OPTIMIZE
<a name="querying-iceberg-data-optimization-rewrite-data-action"></a>

`OPTIMIZE table REWRITE DATA` 압축 작업은 관련 삭제 파일의 크기와 수에 따라 데이터 파일을 보다 최적화된 레이아웃으로 재작성합니다. 구문 및 테이블 속성에 대한 자세한 내용은 [OPTIMIZE](optimize-statement.md) 단원을 참조하세요.

### 예제
<a name="querying-iceberg-data-optimization-example"></a>

다음 예에서는 삭제 파일을 데이터 파일로 병합하고 `category` 값이 `c1`인 대상 파일 크기에 가까운 파일을 생성합니다.

```
OPTIMIZE iceberg_table REWRITE DATA USING BIN_PACK
  WHERE category = 'c1'
```

## VACUUM
<a name="querying-iceberg-vacuum"></a>

`VACUUM`에서는 [스냅샷 만료](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots) 및 [분리된 파일 제거](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files)를 수행합니다. 이러한 작업은 메타데이터 크기를 줄이고 테이블에 지정된 보존 기간보다 오래된 현재 테이블 상태가 아닌 파일을 제거합니다. 구문에 대한 자세한 내용은 [VACUUM](vacuum-statement.md) 단원을 참조하세요.

### 예제
<a name="querying-iceberg-vacuum-example"></a>

다음 예에서는 테이블 속성을 사용하여 지난 3일간의 데이터를 유지하도록 `iceberg_table` 테이블을 구성한 다음 `VACUUM`을 사용하여 이전 스냅샷을 만료하고 테이블에서 분리된 파일을 제거합니다.

```
ALTER TABLE iceberg_table SET TBLPROPERTIES (
  'vacuum_max_snapshot_age_seconds'='259200'
)

VACUUM iceberg_table
```

## Iceberg 테이블 통계 사용
<a name="querying-iceberg-data-optimization-statistics"></a>

Athena의 비용 기반 옵티마이저는 Iceberg 통계를 사용하여 최적의 쿼리 계획을 생성합니다. Iceberg 테이블에 대한 통계가 생성되면 Athena는 이 정보를 자동으로 사용하여 조인 순서, 필터 및 집계 동작에 대한 지능적인 결정을 내립니다. 이를 통해 종종 쿼리 성능이 개선되고 비용이 절감됩니다.

S3 테이블을 사용하면 Iceberg 통계가 기본적으로 켜집니다. 다른 Iceberg 테이블의 경우 Athena는 테이블 속성 `use_iceberg_statistics`를 사용하여 비용 기반 최적화를 위해 통계를 활용할지를 결정합니다. 시작하려면 *AWS Glue 사용 설명서*의 [열 통계를 사용한 쿼리 성능 최적화](https://docs.aws.amazon.com//glue/latest/dg/column-statistics.html)를 참조하거나 [Athena 콘솔](https://docs.aws.amazon.com/athena/latest/ug/cost-based-optimizer.html)을 사용하여 Iceberg 테이블에서 온디맨드 통계를 생성합니다.

## Parquet 열 인덱싱 사용
<a name="querying-iceberg-data-optimization-parquet-column-indexing"></a>

Parquet 열 인덱싱을 사용하면 Athena가 행 그룹 수준 통계 외에도 페이지 수준 최소/최대 통계를 활용하여 쿼리 실행 중에 더 정확한 데이터 정리를 수행할 수 있습니다. 이를 통해 Athena는 행 그룹 내에서 불필요한 페이지를 건너뛰어 스캔되는 데이터의 양을 크게 줄이고 쿼리 성능을 개선할 수 있습니다. 정렬된 열에 선택적 필터 조건자가 있는 쿼리에 가장 적합하며 실행 시간과 데이터 스캔 효율성을 모두 개선하는 동시에 Athena가 Amazon S3에서 읽어야 하는 데이터의 양을 줄입니다.

Athena는 기본 Parquet 파일에 열 인덱스가 있는 경우 기본적으로 S3 Tables에서 Parquet 열 인덱스를 사용합니다. 다른 Iceberg 테이블의 경우 Athena는 `use_iceberg_parquet_column_index` 속성을 사용하여 Parquet 파일에서 열 인덱스를 활용할지를 결정합니다. AWS Glue 콘솔 또는 `UpdateTable` API를 사용하여이 테이블 속성을 설정합니다.