Iceberg 테이블 최적화 - Amazon Athena

Iceberg 테이블 최적화

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

OPTIMIZE

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

예제

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

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

VACUUM

VACUUM에서는 스냅샷 만료분리된 파일 제거를 수행합니다. 이러한 작업은 메타데이터 크기를 줄이고 테이블에 지정된 보존 기간보다 오래된 현재 테이블 상태가 아닌 파일을 제거합니다. 구문에 대한 자세한 내용은 VACUUM 단원을 참조하세요.

예제

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

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

Iceberg 테이블 통계 사용

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

S3 테이블을 사용하면 Iceberg 통계가 기본적으로 켜집니다. 다른 Iceberg 테이블의 경우 Athena는 테이블 속성 use_iceberg_statistics를 사용하여 비용 기반 최적화를 위해 통계를 활용할지를 결정합니다. 시작하려면 AWS Glue 사용 설명서열 통계를 사용한 쿼리 성능 최적화를 참조하거나 Athena 콘솔을 사용하여 Iceberg 테이블에서 온디맨드 통계를 생성합니다.

Parquet 열 인덱싱 사용

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

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