

# 트랜잭션 테이블 채우기 및 관리
<a name="populate-otf"></a>

[Apache Iceberg](https://iceberg.apache.org/), [Apache Hudi](https://hudi.incubator.apache.org/) 및 Linux Foundation [Delta Lake](https://delta.io/)는 Apache Spark에서 대규모 데이터 분석 및 데이터 레이크 워크로드를 처리하도록 설계된 오픈 소스 테이블 형식입니다.

다음과 같은 방법을 사용하여 AWS Glue Data Catalog에서 Iceberg, Hudi 및 Delta Lake 테이블을 채울 수 있습니다.
+ AWS Glue 크롤러 - AWS Glue 크롤러는 데이터 카탈로그에서 Iceberg, Hudi 및 Delta Lake 테이블 메타데이터를 자동으로 검색하고 채울 수 있습니다. 자세한 내용은 [크롤러를 사용하여 데이터 카탈로그 채우기](add-crawler.md) 섹션을 참조하세요.
+ AWS Glue ETL 작업 - ETL 작업을 생성하여 Iceberg, Hudi 및 Delta Lake 테이블에 데이터를 쓰고 데이터 카탈로그에서 해당 메타데이터를 채울 수 있습니다. 자세한 내용은 [AWS Glue ETL 작업에서 데이터 레이크 프레임워크 사용](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html)을 참조하세요.
+ AWS Glue 콘솔, AWS Lake Formation 콘솔, AWS CLI 또는 API - AWS Glue 콘솔, Lake Formation 콘솔 또는 API를 사용하여 데이터 카탈로그에서 Iceberg 테이블 정의를 생성하고 관리할 수 있습니다.

**Topics**
+ [Apache Iceberg 테이블 생성](#creating-iceberg-tables)
+ [Iceberg 테이블 최적화](table-optimizers.md)
+ [Iceberg 테이블의 쿼리 성능 최적화](iceberg-column-statistics.md)

## Apache Iceberg 테이블 생성
<a name="creating-iceberg-tables"></a>

Amazon S3에 상주하는 데이터를 사용하여 AWS Glue Data Catalog에서 Apache Parquet 데이터 형식을 사용하는 Apache Iceberg 테이블을 생성할 수 있습니다. 테이터 카탈로그의 테이블은 데이터 스토어의 데이터를 표현하는 메타데이터 정의입니다. 기본적으로 AWS Glue는 Iceberg v2 테이블을 생성합니다. v1과 v2 테이블의 차이점은 Apache Iceberg 설명서의 [Format version changes](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)(포맷 버전 변경 사항)을 참조하세요.

 [Apache Iceberg](https://iceberg.apache.org/)는 매우 큰 분석 데이터세트를 위한 오픈 테이블 형식입니다. Iceberg를 사용하면 스키마를 쉽게 변경할 수 있습니다(이를 스키마 진화라고도 함). 다시 말해서 사용자는 기본 데이터를 손상시키지 않고 데이터 테이블에서 열을 추가하거나, 이름을 바꾸거나, 제거할 수 있습니다. 또한 Iceberg는 사용자가 시간 경과에 따른 데이터 변경 사항을 추적할 수 있는 데이터 버전 관리를 지원합니다. 이를 통해 사용자는 과거 버전의 데이터에 액세스하여 데이터를 쿼리하고 업데이트와 삭제 사이의 데이터 변화를 분석할 수 있습니다.

AWS Glue 또는 Lake Formation 콘솔을 사용하거나 AWS Glue API의 `CreateTable` 작업을 사용하여 데이터 카탈로그에 Iceberg 테이블을 생성할 수 있습니다. 자세한 내용은 [CreateTable 작업(Python: create\$1table)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)을 참조하세요.

데이터 카탈로그에서 Iceberg 테이블을 생성할 때 Amazon S3에서 테이블 형식과 메타데이터 파일 경로를 지정해야 읽기 및 쓰기를 수행할 수 있습니다.

 Lake Formation을 사용하면 AWS Lake Formation에 Amazon S3 데이터 위치를 등록할 때 세분화된 액세스 제어 권한을 사용하여 Iceberg 테이블을 보호할 수 있습니다. Lake Formation에 등록되지 않은 Amazon S3의 원본 데이터와 메타데이터의 경우 액세스 권한이 Amazon S3 및 AWS Glue 작업에 대한 IAM 권한 정책에 의해 결정됩니다. 자세한 내용은 [권한 관리](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)를 참조하세요.

**참고**  
데이터 카탈로그는 파티션 생성 및 Iceberg 테이블 속성 추가를 지원하지 않습니다.

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

 데이터 카탈로그에서 Iceberg 테이블을 생성하고 Lake Formation 데이터 액세스 권한을 설정하려면 다음 요구 사항을 완료해야 합니다.

1. 

**Lake Formation에 등록된 데이터 없이 Iceberg 테이블을 생성하는 데 필요한 권한.**

   데이터 카탈로그에서 테이블을 생성하는 데 필요한 권한 외에도 테이블 생성자는 다음 권한이 필요합니다.
   + 리소스 arn:aws:s3:::\$1bucketName\$1에 대한 `s3:PutObject`
   + 리소스 arn:aws:s3:::\$1bucketName\$1에 대한 `s3:GetObject`
   + 리소스 arn:aws:s3:::\$1bucketName\$1에 대한 `s3:DeleteObject`

1. 

**Lake Formation에 등록된 데이터를 사용하여 Iceberg 테이블을 생성하는 데 필요한 권한.**

   Lake Formation을 사용하여 데이터 레이크의 데이터를 관리하고 보호하려면 테이블을 위한 데이터가 있는 Amazon S3 위치를 Lake Formation에 등록합니다. 이는 Lake Formation이 Athena, Redshift Spectrum 및 Amazon EMR과 같은 AWS 분석 서비스에 자격 증명을 벤딩하여 데이터에 액세스할 수 있도록 하기 위함입니다. Amazon S3 위치 등록에 대한 자세한 내용은 [데이터 레이크에 Amazon S3 위치 추가](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) 섹션을 참조하세요.

   Lake Formation에 등록된 기본 데이터를 읽고 쓰는 보안 주체는 다음과 같은 권한이 필요합니다.
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     위치에 대한 데이터 위치 권한이 있는 보안 주체는 모든 하위 위치에 대한 위치 권한도 갖습니다.

     데이터 위치 권한에 대한 자세한 내용은 [기본 데이터 액세스 제어](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html#data-location-permissions) 섹션을 참조하세요.

 압축을 활성화하려면 서비스가 데이터 카탈로그의 테이블을 업데이트할 권한이 있는 IAM 역할을 맡아야 합니다. 자세한 내용은 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션을 참조하세요.

### Iceberg 테이블 생성
<a name="create-iceberg-table"></a>

이 페이지에 설명된 대로 AWS Glue 또는 Lake Formation 콘솔을 사용하거나 AWS Command Line Interface를 사용하여 Iceberg v1 및 v2 테이블을 생성할 수 있습니다. 또는 AWS Glue 크롤러를 사용하여 Iceberg 테이블을 생성할 수도 있습니다. 자세한 내용은 AWS Glue 개발자 안내서의 [데이터 카탈로그 및 크롤러](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)를 참조하세요.

**Iceberg 테이블을 생성하려면**

------
#### [ Console ]

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. 데이터 카탈로그에서 **테이블**을 선택하고 **테이블 생성** 버튼을 사용하여 다음 속성을 지정합니다.
   + **테이블 이름** - 테이블 이름을 입력합니다. Athena를 사용하여 테이블에 액세스하는 경우 Amazon Athena 사용 설명서의 [이름 지정 팁](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)을 사용하세요.
   + **데이터베이스** - 기존 데이터베이스를 선택하거나 새 데이터베이스를 생성합니다.
   + **설명** - 테이블에 대한 설명입니다. 테이블 내용을 이해할 수 있도록 설명을 적을 수 있습니다.
   + **테이블 형식** - **테이블 형식**으로 Apache Iceberg를 선택합니다.
   + **압축 활성화** - 테이블의 작은 Amazon S3 객체를 더 큰 객체로 압축하려면 **압축 활성화**를 선택합니다.
   + **IAM 역할** - 압축을 실행하기 위해 서비스는 사용자를 대신하여 IAM 역할을 맡습니다. 드롭다운을 사용하여 IAM 역할을 선택할 수 있습니다. 압축 기능을 활성화하는 데 필요한 권한이 역할에 있는지 확인합니다.

     필요한 권한에 대해 알아보려면 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션을 참조하세요.
   + **위치** - 메타데이터 테이블을 저장하는 Amazon S3의 폴더 경로를 지정합니다. Iceberg가 읽기 및 쓰기를 수행하려면 데이터 카탈로그에 메타데이터 파일과 위치가 필요합니다.
   + **스키마** - **열 추가**를 선택하여 열과 열의 데이터 유형을 추가합니다. 빈 테이블을 생성하고 나중에 스키마를 업데이트할 수 있습니다. 데이터 카탈로그는 Hive 데이터 유형을 지원합니다. 자세한 내용은 [Hive 데이터 유형](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462)을 참조하세요.

      Iceberg를 사용하면 테이블을 생성한 후 스키마와 파티션을 개선할 수 있습니다. [Athena 쿼리](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html)를 사용하여 테이블 스키마를 업데이트하고 [Spark 쿼리](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions)를 사용하여 파티션을 업데이트할 수 있습니다.

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"test-iceberg-input-demo",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://DOC_EXAMPLE_BUCKET_ICEBERG/"
            }
        }'
```

------

**Topics**
+ [사전 조건](#iceberg-prerequisites)
+ [Iceberg 테이블 생성](#create-iceberg-table)

# Iceberg 테이블 최적화
<a name="table-optimizers"></a>

AWS Glue에서는 AWS 분석 엔진 및 ETL 작업에서 사용되는 Apache Iceberg 테이블의 관리 및 성능을 개선하는 여러 테이블 최적화 옵션을 지원합니다. 이러한 최적화 프로그램은 효율적인 스토리지 활용, 향상된 쿼리 성능 및 효과적인 데이터 관리를 제공합니다. AWS Glue에서 사용할 수 있는 기본 옵티마이저에는 다음 세 가지 유형이 있습니다.
+ **압축** - 데이터 압축은 작은 데이터 파일을 압축하여 스토리지 사용량을 줄이고 읽기 성능을 향상시킵니다. 데이터 파일이 병합 및 재작성되어 불필요한 데이터를 제거하고 조각난 데이터를 더 크고 효율적인 파일로 통합합니다. 자동으로 실행되도록 압축을 구성할 수 있습니다.

  Binpack은 Apache Iceberg의 기본 압축 전략입니다. 최적의 성능을 위해 더 작은 데이터 파일을 더 큰 데이터 파일로 결합합니다. 압축은 유사한 데이터를 함께 클러스터링하는 Sort 및 Z-order 전략도 지원합니다. Sort는 지정된 열을 기반으로 데이터를 구성하여 필터링된 작업에 대한 쿼리 성능을 개선합니다. Z-order는 여러 열이 동시에 쿼리될 때 쿼리 성능을 향상시키는 정렬된 데이터 세트를 생성합니다. Binpack, Sort, Z-order의 세 가지 압축 전략은 모두 쿼리 엔진에서 스캔하는 데이터의 양을 줄여 쿼리 처리 비용을 줄입니다.
+ **스냅샷 보존** - 스냅샷은 Iceberg 테이블의 타임스탬프가 표시된 버전입니다. 스냅샷 보존 구성을 통해 고객은 스냅샷을 보존하는 기간과 보존할 스냅샷 수를 적용할 수 있습니다. 스냅샷 보존 최적화 프로그램을 구성하면 오래되고 불필요한 스냅샷과 연결된 파일을 제거하여 스토리지 오버헤드를 관리하는 데 도움이 될 수 있습니다.
+ **분리된 파일 삭제** - 분리된 파일은 Iceberg 테이블 메타데이터에서 더 이상 참조되지 않는 파일입니다. 이러한 파일은 시간이 지남에 따라 누적될 수 있으며, 특히 테이블 삭제 같은 작업이나 ETL 작업 실패 이후에 누적될 수 있습니다. 분리된 파일 삭제를 활성화하면 AWS Glue에서 이러한 불필요한 파일을 주기적으로 식별 및 제거하여 스토리지를 확보할 수 있습니다.

카탈로그 수준 최적화 구성은 Lake Formation 콘솔에서 AWS Glue `UpdateCatalog` API 작업을 통해 사용할 수 있습니다. AWS Glue 콘솔, AWS CLI 또는 AWS Glue API 작업을 사용하여 Data Catalog의 개별 Iceberg 테이블에 대한 압축, 스냅샷 보존 및 분리된 파일 삭제 최적화 프로그램을 활성화하거나 비활성화할 수 있습니다.

 다음 비디오는 데이터 카탈로그에서 Iceberg 테이블용 옵티마이저를 구성하는 방법을 보여줍니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/xOXE7AS-pNA?si=lKvt_TSlPkoc6OXn)


**Topics**
+ [테이블 최적화 필수 조건](optimization-prerequisites.md)
+ [카탈로그 수준 테이블 옵티마이저](catalog-level-optimizers.md)
+ [압축 최적화](compaction-management.md)
+ [스냅샷 보존 최적화](snapshot-retention-management.md)
+ [분리된 파일 삭제](orphan-file-deletion.md)
+ [최적화 세부 정보 보기](view-optimization-status.md)
+ [Amazon CloudWatch 지표 보기](view-optimization-metrics.md)
+ [옵티마이저 삭제](delete-optimizer.md)
+ [고려 사항 및 제한 사항](optimizer-notes.md)
+ [테이블 옵티마이저 지원 리전](regions-optimizers.md)

# 테이블 최적화 필수 조건
<a name="optimization-prerequisites"></a>

테이블 옵티마이저는 테이블에 최적화 옵션(압축, 스냅샷 보존, 분리된 파일 삭제)을 활성화할 때 사용자가 지정하는 AWS Identity and Access Management(IAM) 역할의 권한을 갖습니다. 모든 옵티마이저에 대해 단일 역할을 생성하거나 각 옵티마이저에 대해 별도의 역할을 생성할 수 있습니다.

**참고**  
분리된 파일 삭제 최적화 프로그램에는 `glue:updateTable` 또는 `s3:putObject` 권한이 필요하지 않습니다. 스냅샷 만료 및 압축 최적화 프로그램에는 동일한 권한 세트가 필요합니다.

IAM 역할에는 데이터 카탈로그의 데이터를 읽고 메타데이터를 업데이트할 수 있는 권한이 있어야 합니다. IAM 역할을 생성하여 다음 인라인 정책을 연결할 수 있습니다.
+ AWS Lake Formation에 등록되지 않은 데이터에 대한 위치에서 Amazon S3 읽기/쓰기 권한을 부여하는 다음 인라인 정책을 추가하니다. 이 정책에는 데이터 카탈로그의 테이블을 업데이트하고 AWS Glue에게 Amazon CloudWatch 로그에 로그를 추가하고 지표를 게시할 수 있는 권한도 포함되어 있습니다. Lake Formation에 등록되지 않은 Amazon S3의 원본 데이터는 액세스 권한이 Amazon S3 및 AWS Glue 작업에 대한 IAM 권한 정책에 의해 결정됩니다.

  다음 인라인 정책에서는 Amazon S3 버킷 이름이 있는 `bucket-name`, `aws-account-id`, `region`을 데이터 카탈로그의 유효한 AWS 계정 번호, 리전, `database_name`을 데이터베이스 이름으로, `table_name`은 테이블 이름으로 대체하십시오.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket/*"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "glue:UpdateTable",
                  "glue:GetTable"
              ],
              "Resource": [
                  "arn:aws:glue:us-east-1:111122223333:table/<database-name>/<table-name>",
                  "arn:aws:glue:us-east-1:111122223333:database/<database-name>",
                  "arn:aws:glue:us-east-1:111122223333:catalog"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "logs:CreateLogGroup",
                  "logs:CreateLogStream",
                  "logs:PutLogEvents"
              ],
              "Resource": [
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
              ]
          }
      ]
  }
  ```

------
+ Lake Formation에 등록된 데이터에 대해 압축을 활성화하려면 다음 정책을 사용하십시오.

  최적화 역할에 테이블에 대한 `IAM_ALLOWED_PRINCIPALS` 그룹 권한이 부여되지 않은 경우, 해당 역할에는 테이블에 대한 Lake Formation `ALTER`, `DESCRIBE`, `INSERT` 및 `DELETE` 권한이 필요합니다.

  Amazon S3 버킷의 Lake Formation 등록에 대한 자세한 내용은 [데이터 레이크에 Amazon S3 위치 추가](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html) 섹션을 참조하세요.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lakeformation:GetDataAccess"
        ],
        "Resource": "*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:UpdateTable",
          "glue:GetTable"
        ],
        "Resource": [
          "arn:aws:glue:us-east-1:111122223333:table/databaseName/tableName",
          "arn:aws:glue:us-east-1:111122223333:database/databaseName",
          "arn:aws:glue:us-east-1:111122223333:catalog"
        ]
      },
      {
        "Effect": "Allow",
        "Action": [
          "logs:CreateLogGroup",
          "logs:CreateLogStream",
          "logs:PutLogEvents"
        ],
        "Resource": [
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-compaction/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-retention/logs:*",
          "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue/iceberg-orphan-file-deletion/logs:*"
        ]
      }
    ]
  }
  ```

------
+ (선택 사항)[서버 측 암호화](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)를 사용하여 암호화된 Amazon S3 버킷의 데이터로 Iceberg 테이블을 최적화하려면 압축 역할에 Amazon S3 객체를 해독하고 암호화된 버킷에 객체를 쓰기 위한 새 데이터 키를 생성할 수 있는 권한이 필요합니다. 다음 텍스트를 AWS KMS 키 정책에 추가합니다. 버킷 수준 암호화만 지원합니다.

  ```
  {
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::<aws-account-id>:role/<optimizer-role-name>"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
  ```
+  (선택 사항) Lake Formation에 등록된 데이터 위치의 경우, 위치를 등록하는 데 사용되는 역할에는 Amazon S3 객체를 해독하고 암호화된 버킷에 객체를 쓰기 위한 새 데이터 키를 생성할 수 있는 권한이 필요합니다. 자세한 내용을 알아보려면 [암호화된 Amazon S3 위치 등록](https://docs.aws.amazon.com/lake-formation/latest/dg/register-encrypted.html)을 참조하십시오.
+ (선택 사항) AWS KMS 키가 다른 AWS 계정에 저장되어 있는 경우 압축 역할에 다음 권한을 포함해야 합니다.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Resource": [
          "arn:aws:kms:us-east-1:111122223333:key/key-id"
        ]
      }
    ]
  }
  ```

------
+  압축을 실행하는 데 사용하는 역할에는 해당 역할에 대한 `iam:PassRole` 권한이 있어야 합니다.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": [
          "arn:aws:iam::111122223333:role/<optimizer-role-name>"
        ]
      }
    ]
  }
  ```

------
+ 압축 프로세스를 실행하는 IAM 역할을 수임하도록 AWS Glue 서비스의 역할에 다음 신뢰 정책을 추가합니다.

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
          "Service": "glue.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------
+ <a name="catalog-optimizer-requirement"></a> (선택 사항) 카탈로그 수준 테이블 최적화를 활성화하도록 Data Catalog 설정을 업데이트하려면 사용된 IAM 역할에 루트 카탈로그에 대한 `glue:UpdateCatalog` 권한 또는 AWS Lake Formation `ALTER CATALOG` 권한이 있어야 합니다. `GetCatalog` API를 사용하여 카탈로그 속성을 확인할 수 있습니다.

# 카탈로그 수준 테이블 옵티마이저
<a name="catalog-level-optimizers"></a>

일회성 카탈로그 구성을 사용하면 AWS Glue Data Catalog에서 모든 신규 및 업데이트된 Apache Iceberg 테이블에 대해 압축, 스냅샷 보존, 분리된 파일 삭제 등의 자동 옵티마이저를 설정할 수 있습니다. 카탈로그 수준 옵티마이저 구성을 사용하면 카탈로그 내의 모든 테이블에 일관된 옵티마이저 설정을 적용할 수 있으므로, 각 테이블마다 옵티마이저를 개별적으로 구성할 필요가 없습니다.

데이터 레이크 관리자는 Lake Formation 콘솔에서 기본 카탈로그를 선택하고 `Table optimization` 옵션으로 옵티마이저를 활성화하여 테이블 옵티마이저를 구성할 수 있습니다. Data Catalog에서 새 테이블을 생성하거나 기존 테이블을 업데이트하면, Data Catalog는 테이블 최적화를 자동으로 실행하여 운영 부담을 줄입니다.

테이블 수준에서 최적화를 구성했거나 이전에 테이블의 테이블 최적화 설정을 삭제한 경우 이러한 테이블별 설정이 테이블 최적화에 대한 기본 카탈로그 설정보다 우선합니다. 구성 파라미터가 테이블 또는 카탈로그 수준에서 정의되지 않은 경우 Iceberg 테이블 속성 값이 적용됩니다. 이 설정은 스냅샷 보존 및 분리된 파일 삭제 옵티마이저에 적용됩니다.

카탈로그 수준 옵티마이저를 활성화할 경우 다음 사항을 고려하세요.
+ 카탈로그 생성 시 최적화 설정을 구성한 다음 카탈로그 업데이트 요청을 통해 최적화를 비활성화하면 작업이 카탈로그 내의 모든 테이블에 캐스케이드됩니다.
+ 지정된 테이블에 대해 옵티마이저를 이미 구성한 경우 카탈로그 수준에서 작업을 비활성화해도 이 테이블에는 영향을 미치지 않습니다.
+ 카탈로그 수준에서 옵티마이저를 비활성화하면 기존 옵티마이저 구성이 있는 테이블은 기존 설정을 유지하며 카탈로그 수준 변경의 영향을 받지 않습니다. 하지만 자체 옵티마이저 구성이 없는 테이블은 카탈로그 수준에서 비활성화된 상태를 상속합니다.
+ 스냅샷 보존 및 분리된 파일 삭제 옵티마이저는 일정에 따라 실행될 수 있으므로, 업데이트할 경우 일정의 시작 시점이 무작위로 지연됩니다. 이 경우 각 옵티마이저가 조금씩 다른 시간에 시작되어 로드가 분산되고, 서비스 한도를 초과할 가능성이 줄어듭니다.
+ AWS Glue Data Catalog 암호화가 활성화된 경우 카탈로그 수준 옵티마이저 설정은 테이블에 의해 자동으로 상속되지 않습니다. 카탈로그에서 메타데이터 암호화가 활성화된 경우 각 테이블에 대해 테이블 옵티마이저를 개별적으로 구성해야 합니다. 카탈로그 수준 옵티마이저 상속을 사용하려면 카탈로그에서 메타데이터 암호화를 비활성화해야 합니다.

**Topics**
+ [카탈로그 수준 자동 테이블 최적화 활성화](enable-auto-table-optimizers.md)
+ [카탈로그 수준 최적화 보기](view-catalog-optimizations.md)
+ [카탈로그 수준 테이블 최적화 비활성화](disable-auto-table-optimizers.md)

# 카탈로그 수준 자동 테이블 최적화 활성화
<a name="enable-auto-table-optimizers"></a>

 Data Catalog의 모든 새 Apache Iceberg 테이블에 대해 자동 테이블 최적화를 활성화할 수 있습니다. 테이블을 생성한 후 테이블 최적화 설정을 수동으로 명시적으로 업데이트할 수도 있습니다.

 카탈로그 수준 테이블 최적화를 활성화하도록 Data Catalog 설정을 업데이트하려면 사용된 IAM 역할에 루트 카탈로그에 대한 `glue:UpdateCatalog` 권한이 있어야 합니다. `GetCatalog` API를 사용하여 카탈로그 속성을 확인할 수 있습니다.

 Lake Formation 관리형 테이블의 경우, 카탈로그 최적화 구성 중에 선택하는 IAM 역할에는 새 테이블 또는 업데이트된 테이블에 대한 Lake Formation `ALTER`, `DESCRIBE`, `INSERT` 및 `DELETE` 권한이 있어야 합니다.

## 카탈로그 수준 옵티마이저를 활성화하려면(콘솔)
<a name="enable-catalog-optimizers-console"></a>

1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))을 엽니다.

1. 탐색 창에서 **Data Catalog**를 선택합니다.

1. **카탈로그** 탭을 선택합니다.

1. 계정 수준 카탈로그를 선택합니다.

1. **테이블 최적화** 탭에서 **테이블 최적화**, **편집**을 선택합니다. **작업**에서 **최적화 편집**을 선택할 수도 있습니다.  
![\[이 스크린샷은 카탈로그 수준에서 최적화를 활성화하는 편집 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/catalog-edit-optimizations.png)

1. **테이블 최적화** 페이지에서 다음 옵션을 구성합니다.  
![\[이 스크린샷은 카탈로그 수준의 최적화 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/catalog-optimization-options.png)

   1. **압축** 설정 구성:
      + 압축을 활성화/비활성화합니다.
      + 옵티마이저를 실행하는 데 필요한 권한이 있는 IAM 역할을 선택합니다.

        IAM 역할의 권한 요구 사항에 대한 자세한 내용은 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션을 참조하세요.

   1. **스냅샷 보존** 설정 구성:
      + 보존을 활성화/비활성화합니다.
      + 스냅샷 보존 기간을 일 단위로 설정합니다. 기본값은 5일입니다.
      + 보존할 스냅샷 수를 설정합니다. 기본값은 스냅샷 1개입니다.
      + 만료된 파일의 정리를 활성화/비활성화합니다.

   1. **분리된 파일 삭제** 설정 구성:
      + 분리된 파일 삭제를 활성화/비활성화합니다.
      + 분리된 파일 기간을 일 단위로 설정합니다. 기본값은 3일입니다.

1. **저장**을 선택합니다.

## AWS CLI를 통해 카탈로그 수준 옵티마이저 활성화
<a name="catalog-auto-optimizers-cli"></a>

다음 CLI 명령을 사용하여 옵티마이저 설정으로 기존 카탈로그를 업데이트합니다.

**Example 옵티마이저 설정으로 카탈로그 업데이트**  

```
aws glue update-catalog \
   --name catalog-id \
  --catalog-input \
  '{
    "CatalogId": "111122223333",
    "CatalogInput": {
        "CatalogProperties": {
            "CustomProperties": {
                "ColumnStatistics.Enabled": "false",
                "ColumnStatistics.RoleArn": "arn:aws:iam::111122223333:role/service-role/stats-role-name"
            },
            "IcebergOptimizationProperties": {
                "RoleArn": "arn:aws:iam::111122223333:role/optimizer-role-name",
                "Compaction": {
                    "enabled": "true"
                },
                "Retention": {
                    "enabled": "true",
                    "snapshotRetentionPeriodInDays": "10",
                    "numberOfSnapshotsToRetain": "5",
                    "cleanExpiredFiles": "true"
                },
                "OrphanFileDeletion": {
                    "enabled": "true",
                    "orphanFileRetentionPeriodInDays": "3"
                }
            }
        }
    }
}'
```

카탈로그 수준 옵티마이저에 문제가 발생하면 다음을 확인합니다.
+ 사전 조건 섹션에서 설명하는 올바른 권한이 IAM 역할에 부여되어 있는지 확인합니다.
+ CloudWatch 로그에 옵티마이저 작업과 관련한 오류 메시지가 없는지 확인합니다.

   자세한 내용은 **Amazon CloudWatch 사용 설명서의 [사용 가능한 지표 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)를 참조하세요.
+ 카탈로그 구성을 검사하여 카탈로그 설정이 제대로 적용되었는지 확인합니다.
+ 테이블 액세스 오류의 경우 CloudWatch 로그 및 EventBridge 알림에서 자세한 오류 정보를 확인합니다.

# 카탈로그 수준 최적화 보기
<a name="view-catalog-optimizations"></a>

 카탈로그 수준 테이블 최적화가 활성화되면, AWS Management Console, SDK 또는 AWS Glue 크롤러에서 `CreateTable` 또는 `UpdateTable` API를 통해 Apache Iceberg 테이블이 생성되거나 업데이트될 때마다 해당 테이블에 대해 동일한 테이블 수준 설정이 생성됩니다.

 테이블을 생성하거나 업데이트한 후 테이블 세부 정보에서 테이블 최적화를 확인할 수 있습니다. `Table optimization`의 경우 `Configuration source` 속성 세트가 `Catalog`로 설정됩니다.

![\[카탈로그 수준 최적화 구성이 적용된 Apache Iceberg 테이블의 이미지.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/catalog-optimization-enabled.png)


# 카탈로그 수준 테이블 최적화 비활성화
<a name="disable-auto-table-optimizers"></a>

 AWS Lake Formation 콘솔, `glue:UpdateCatalog` API를 사용하여 새 테이블의 테이블 최적화를 비활성화할 수 있습니다.

**카탈로그 수준에서 테이블 최적화를 비활성화하려면**

1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))을 엽니다.

1. 왼쪽 탐색 모음에서 **카탈로그**를 선택합니다.

1. **카탈로그 요약** 페이지의 **테이블 최적화**에서 **편집**을 선택합니다.

1. **최적화 편집** 페이지에서 **최적화 옵션**을 선택 취소합니다.

1. **저장**을 선택합니다.

# 압축 최적화
<a name="compaction-management"></a>

 Apache Iceberg와 같은 오픈 테이블 형식을 사용하는 Amazon S3 데이터 레이크는 데이터를 S3 객체로 저장합니다. 데이터 레이크 테이블에 수천 개의 작은 Amazon S3 객체가 있으면 메타데이터 오버헤드가 증가하고 읽기 성능에 영향을 미칩니다. AWS Glue Data Catalog에서는 Iceberg 테이블의 관리형 압축을 제공하고, Amazon Athena 및 Amazon EMR, AWS Glue ETL 작업과 같은 AWS 분석 서비스를 통해 작은 객체를 큰 객체로 압축하여 읽기 성능을 높입니다. 데이터 카탈로그는 동시 쿼리를 방해하지 않으면서 압축을 수행하고 Parquet 형식 테이블에 대해서만 압축을 지원합니다.

테이블 옵티마이저는 테이블 파티션을 지속적으로 모니터링하여 파일 수 및 파일 크기가 임곗값을 초과할 경우 압축 프로세스를 시작합니다.

Data Catalog에서는 테이블 또는 파티션에 100개가 넘는 파일이 있을 때 압축 프로세스가 시작됩니다. 각 파일은 대상 파일 크기의 75%보다 작아야 합니다. 대상 파일 크기는 `write.target-file-size-bytes` 테이블 속성에 의해 정의되며 명시적으로 설정되지 않은 경우 기본값은 512MB입니다.

 제한 사항은 [관리형 데이터 압축에 지원되는 형식 및 제한 사항](optimizer-notes.md#compaction-notes) 섹션을 참조하세요.

**Topics**
+ [압축 최적화 프로그램 활성화](enable-compaction.md)
+ [압축 최적화 프로그램 비활성화](disable-compaction.md)

# 압축 최적화 프로그램 활성화
<a name="enable-compaction"></a>

 AWS Glue 콘솔, AWS CLI 또는 AWS API를 사용하여 AWS Glue Data Catalog에서 Apache Iceberg 테이블 압축을 활성화할 수 있습니다. 새 테이블의 경우 Apache Iceberg를 테이블 형식으로 선택하고 테이블을 생성할 때 압축을 활성화할 수 있습니다. 압축 기능은 새 테이블에 대해 기본적으로 비활성화되어 있습니다.

------
#### [ Console ]

**압축 기능 활성화하는 방법**

1.  [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 열고 데이터 레이크 관리자, 테이블 작성자 또는 테이블에 대한 `glue:UpdateTable` 및 `lakeformation:GetDataAccess` 권한을 부여받은 사용자로 로그인합니다.

1. 탐색 창의 **데이터 카탈로그**에서 **테이블**을 선택합니다.

1. **테이블** 페이지에서 압축을 활성화하려는 열린 테이블 형식의 테이블을 선택한 다음, **작업** 메뉴 아래 **최적화**를 선택하고 **활성화**를 선택합니다.

   **테이블 세부 정보** 페이지에서 **테이블 최적화**를 선택하여 압축을 활성화할 수도 있습니다. 페이지 하단에서 **테이블 최적화** 탭을 선택하고 **압축 활성화**를 선택합니다.

   **최적화 활성화** 옵션은 Data Catalog에서 새 Iceberg 테이블을 생성할 때도 사용할 수 있습니다.

1. **최적화 활성화** 페이지의 **최적화 옵션 ** 아래 **압축**을 선택합니다.  
![\[압축 활성화 옵션이 있는 Apache Iceberg 테이블 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/table-enable-compaction.png)

1. 그런 다음 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션에 표시된 권한을 사용하여 드롭다운에서 IAM 역할을 선택합니다.

   **새 IAM 역할 생성** 옵션을 선택하여 압축을 실행하는 데 필요한 권한이 있는 사용자 지정 역할을 생성할 수도 있습니다.

    아래 단계에 따라 기존 IAM 역할을 업데이트하세요.

   1.  IAM 역할에 대한 권한 정책을 업데이트하려면 IAM 콘솔에서 컴팩션을 실행하는 데 사용되는 IAM 역할로 이동합니다.

   1.  **권한 추가** 섹션에서 정책 생성을 선택합니다. 새로 열린 브라우저 창에서 역할에 사용할 새 정책을 생성합니다.

   1. 정책 생성 페이지에서 `JSON` 탭을 선택합니다. 필수 조건에 표시된 JSON 코드를 정책 편집기 필드에 복사합니다.

1. Iceberg 테이블 옵티마이저가 특정 가상 프라이빗 클라우드(VPC)에서 Amazon S3 버킷에 액세스해야 하는 보안 정책 구성이 있는 경우 AWS Glue 네트워크 연결을 생성하거나 기존 연결을 사용하세요.

   AWS Glue VPC 연결을 아직 설정하지 않은 경우 AWS Glue 콘솔 또는 AWS CLI/SDK를 사용하여 [커넥터에 대한 연결 생성](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) 섹션의 단계에 따라 새 연결을 생성하세요.

1. 압축 전략을 선택합니다. 사용할 수 있는 옵션:
   + **Binpack** - Binpack은 Apache Iceberg의 기본 압축 전략입니다. 최적의 성능을 위해 더 작은 데이터 파일을 더 큰 데이터 파일로 결합합니다.
   + **Sort** - Apache Iceberg에서 정렬은 지정된 열을 기반으로 파일 내에서 정보를 클러스터링하여 처리해야 하는 파일 수를 줄여 쿼리 성능을 크게 개선하는 데이터 구성 기법입니다. 정렬 순서 필드를 사용하여 Iceberg 메타데이터에서 정렬 순서를 정의하고, 여러 개의 열이 지정되면 데이터가 순서에 따라 정렬되면 유사한 값의 레코드가 파일 내에 함께 저장됩니다. Sort 압축 전략은 파티션 내의 모든 파일에서 데이터를 정렬하여 최적화를 향상시킵니다.
   + **Z-order** - Z-order는 중요도가 동일한 여러 개의 열을 기준으로 정렬해야 할 때 데이터를 구성하는 방법입니다. 다른 열보다 한 열의 우선 순위를 높이는 기존 정렬과 달리 Z-order는 각 열에 균형 잡힌 가중치를 부여하므로 쿼리 엔진이 데이터를 검색할 때 더 적은 수의 파일을 읽을 수 있습니다.

     이 기술은 여러 열의 값을 이진수 형태로 함께 위빙합니다. 예를 들어, 두 열의 숫자가 3과 4인 경우 Z-순서는 먼저 이진수로 변환합니다(3은 011이 되고 4는 100이 됨). 이후 이러한 숫자를 인터리빙하여 새 값인 011010을 생성합니다. 이 인터리빙으로 관련 데이터를 물리적으로 서로 가깝게 유지하는 패턴이 생성됩니다.

     Z-order는 다차원 쿼리에 특히 효과적입니다. 예를 들어, 소득, 주 및 우편번호별로 Z-order가 적용된 고객 테이블은 여러 차원에서 쿼리할 때 계층적 정렬에 비해 뛰어난 성능을 제공할 수 있습니다. 이러한 구성을 통해 소득과 지리적 위치의 특정 조합을 대상으로 하는 쿼리가 불필요한 파일 스캔을 최소화하면서 관련 데이터를 빠르게 찾을 수 있습니다.

1. **최소 입력 파일** - 압축이 트리거되려면 파티션에 있어야 하는 데이터 파일 수입니다.

1. **파일 삭제 임계값** - 압축에 적합한 크기가 되기 위해 데이터 파일에서 요구되는 최소 삭제 작업 수입니다.

1. **최적화 활성화**를 선택합니다.

------
#### [ AWS CLI ]

 다음 예제는 압축 기능을 활성화하는 방법을 보여줍니다. 계정 ID를 유효한 AWS 계정 ID로 바꿉니다. 데이터베이스 이름과 테이블 이름을 실제 Iceberg 테이블 이름 및 데이터베이스 이름으로 바꿉니다. `roleArn`을 IAM 역할의 AWS 리소스 이름(ARN)과 압축 실행에 필요한 권한이 있는 IAM 역할의 이름으로 바꿉니다. `sort` 압축 전략을 `z-order` 또는 `binpack`과 같이 다른 지원되는 전략으로 바꿀 수 있습니다.

순서는 요구 사항에 따라 다릅니다.

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{
    "roleArn": "arn:aws:iam::123456789012:role/optimizer_role",
    "enabled": true,
    "vpcConfiguration": {"glueConnectionName": "glue_connection_name"},
    "compactionConfiguration": {
      "icebergConfiguration": {"strategy": "sort"}
    }
  }'\
--type compaction
```

------
#### [ AWS API ]

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) 작업을 직접 호출하여 테이블의 압축을 활성화합니다.

------

압축을 활성화하면 압축 실행이 완료되면 **테이블 최적화** 탭에 다음과 같은 압축 세부 정보가 표시됩니다.

시작 시간  
압축 프로세스가 데이터 카탈로그에서 시작되는 시간입니다. 값은 UTC 시간으로 표시된 타임스탬프입니다.

종료 시간  
압축 프로세스가 데이터 카탈로그에서 끝나는 시간입니다. 값은 UTC 시간으로 표시된 타임스탬프입니다.

Status  
압축 실행의 상태입니다. 값은 성공 또는 실패입니다.

압축된 파일 수  
압축된 총 파일 수입니다.

압축된 바이트 수  
압축된 총 바이트 수입니다.

# 압축 최적화 프로그램 비활성화
<a name="disable-compaction"></a>

 AWS Glue 콘솔 또는 AWS CLI를 사용하여 특정 Apache Iceberg 테이블에 대한 자동 압축을 비활성화할 수 있습니다.

------
#### [ Console ]

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. 탐색 창의 **Data Catalog**에서 **테이블**을 선택합니다.

1. 테이블 목록에서 압축을 비활성화하려는 Iceberg 테이블을 선택합니다.

1. **테이블 세부 정보** 페이지 하단 섹션에서 **테이블 최적화** 탭을 선택합니다.

1. **작업**에서 **비활성화**를 선택한 다음, **압축**을 선택합니다.

1.  확인 메시지에서 **압축 비활성화**를 선택합니다. 압축을 나중에 다시 활성화할 수 있습니다.

    확인하면 압축이 비활성화되고 테이블의 압축 상태가 `Disabled`로 다시 켜집니다.

------
#### [ AWS CLI ]

다음 예제에서 계정 ID를 유효한 AWS 계정 ID로 바꿉니다. 데이터베이스 이름과 테이블 이름을 실제 Iceberg 테이블 이름 및 데이터베이스 이름으로 바꿉니다. `roleArn`을 IAM 역할의 AWS 리소스 이름(ARN)과 압축 실행에 필요한 권한이 있는 IAM 역할의 실제 이름으로 대체합니다.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}}'\ 
  --type compaction
```

------
#### [ AWS API ]

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 작업을 직접 호출하여 특정 테이블에 대한 압축을 비활성화합니다.

------

# 스냅샷 보존 최적화
<a name="snapshot-retention-management"></a>

Apache Iceberg 스냅샷 보존 기능을 사용하면 사용자는 특정 시점의 과거 데이터를 쿼리하고 테이블에 대한 원치 않는 수정 사항을 되돌릴 수 있습니다. AWS Glue Data Catalog에서 스냅샷 보존 구성은 이러한 스냅샷(테이블 데이터 버전)이 만료 및 제거되기 전에 보관되는 기간을 제어합니다. 이렇게 하면 구성된 보존 기간 또는 보관할 최대 스냅샷 수를 기준으로 오래된 스냅샷을 자동으로 제거하여 스토리지 비용과 메타데이터 오버헤드를 관리하는 데 도움이 됩니다.

보존 기간(일)과 테이블에 유지할 최대 스냅샷 수를 구성할 수 있습니다. AWS Glue에서 최신 스냅샷이 구성된 한도까지 유지되면서 지정된 보존 기간보다 오래된 스냅샷은 테이블 메타데이터에서 제거됩니다. 메타데이터에서 오래된 스냅샷을 제거한 후 AWS Glue에서는 더 이상 참조되지 않고 만료된 스냅샷에만 있는 해당 데이터 및 메타데이터 파일을 삭제합니다. 이렇게 하면 유지된 스냅샷 시점까지의 쿼리가 가능하고 만료된 스냅샷 데이터에 사용된 스토리지 공간을 확보할 수 있습니다.

**Topics**
+ [스냅샷 보존 옵티마이저 활성화](enable-snapshot-retention.md)
+ [스냅샷 보존 옵티마이저 업데이트](update-snapshot-retention.md)
+ [스냅샷 보존 옵티마이저 비활성화](disable-snapshot-retention.md)

# 스냅샷 보존 옵티마이저 활성화
<a name="enable-snapshot-retention"></a>

 AWS Glue 콘솔, AWS CLI 또는 AWS API를 사용하여 데이터 카탈로그의 Apache Iceberg 테이블에서 스냅샷 보존 옵티마이저를 활성화할 수 있습니다. 새 테이블의 경우 Apache Iceberg를 테이블 형식으로 선택하고 테이블을 생성할 때 스냅샷 보존 옵티마이저를 활성화할 수 있습니다. 스냅샷 보존은 새 테이블에 대해 기본적으로 비활성화되어 있습니다.

------
#### [ Console ]

**스냅샷 보존 옵티마이저 활성화**

1.  [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 열고 데이터 레이크 관리자, 테이블 작성자 또는 테이블에 대한 `glue:UpdateTable` 및 `lakeformation:GetDataAccess` 권한을 부여받은 사용자로 로그인합니다.

1. 탐색 창의 **데이터 카탈로그**에서 **테이블**을 선택합니다.

1. **테이블** 페이지에서 스냅샷 보존 옵티마이저를 활성화하려는 Iceberg 테이블을 선택한 다음 **작업** 메뉴의 **최적화**에서 **활성화**를 선택합니다.

   테이블을 선택하고 **테이블 세부 정보** 페이지를 열어 최적화를 활성화할 수도 있습니다. 페이지 하단에서 **테이블 최적화** 탭을 선택하고 **스냅샷 보존 활성화**를 선택합니다.

1. **최적화 활성화** 페이지의 **최적화 구성**에는 **기본 설정 사용** 또는 **설정 사용자 지정**이라는 두 가지 옵션이 있습니다. 기본 설정을 사용하도록 선택한 경우 AWS Glue에서 Iceberg 테이블 구성에 정의된 속성을 활용하여 스냅샷 보존 기간과 보존할 스냅샷 수를 결정합니다. 이 구성이 없는 경우 AWS Glue는 5일 동안 스냅샷 하나를 유지하고 만료된 스냅샷과 연결된 파일을 삭제합니다.

1.  다음으로 옵티마이저를 실행하기 위해 사용자를 대신하여 AWS Glue에서 수임할 수 있는 IAM 역할을 선택합니다. IAM 역할에 필요한 권한에 대한 자세한 내용은 [테이블 최적화 필수 조건](optimization-prerequisites.md) 섹션을 참조하세요.

   아래 단계에 따라 기존 IAM 역할을 업데이트하세요.

   1.  IAM 역할에 대한 권한 정책을 업데이트하려면 IAM 콘솔에서 컴팩션을 실행하는 데 사용되는 IAM 역할로 이동합니다.

   1.  권한 추가 섹션에서 정책 생성을 선택합니다. 새로 열린 브라우저 창에서 역할에 사용할 새 정책을 생성합니다.

   1. 정책 생성 페이지에서 JSON 탭을 선택합니다. 필수 조건에 표시된 JSON 코드를 정책 편집기 필드에 복사합니다.

1. **스냅샷 보존 구성** 값을 수동으로 설정하려면 **설정 사용자 지정**을 선택합니다.  
![\[보존 활성화 > 설정 사용자 지정 옵션이 있는 Apache Iceberg 테이블 세부 정보 페이지.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/table-enable-retention.png)

1. 모든 최적화 프로그램 활성화에 대해 단일 IAM 역할을 사용하려면 **선택한 최적화 프로그램에 선택한 IAM 역할 적용** 옵션 확인란을 선택합니다.

1. Iceberg 테이블 옵티마이저가 특정 가상 프라이빗 클라우드(VPC)에서 Amazon S3 버킷에 액세스해야 하는 보안 정책 구성이 있는 경우 AWS Glue 네트워크 연결을 생성하거나 기존 연결을 사용하세요.

   AWS Glue VPC 연결을 아직 설정하지 않은 경우 AWS Glue 콘솔 또는 AWS CLI/SDK를 사용하여 [커넥터에 대한 연결 생성](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) 섹션의 단계에 따라 새 연결을 생성하세요.

1. 다음으로 **스냅샷 보존 구성**에서 [Iceberg 테이블 구성](https://iceberg.apache.org/docs/1.5.2/configuration/#table-behavior-properties)에 지정된 값을 사용하도록 선택하거나 스냅샷 보존 기간(history.expire.max-snapshot-age-ms) 및 보존할 최소 스냅샷 수(history.expire.min-snapshots-to-keep), 연속된 스냅샷 삭제 작업 실행 간의 시간 간격(단위: 시간)에 대한 사용자 지정 값을 지정합니다.

1.  테이블 옵티마이저가 테이블 메타데이터에서 오래된 스냅샷을 삭제할 때 그에 속한 파일을 삭제하려면 **관련 파일 삭제**를 선택합니다.

    이 옵션을 선택하지 않으면 오래된 스냅샷이 테이블 메타데이터에서 제거되더라도 관련 파일은 분리된 파일로 스토리지에 남아 있게 됩니다.

1. 다음으로 주의 설명을 읽고 **동의합니다**를 선택하여 계속 진행합니다.
**참고**  
 데이터 카탈로그에서 스냅샷 보존 옵티마이저는 브랜치 및 태그 수준 보존 정책에 의해 제어되는 수명 주기를 준수합니다. 자세한 내용은 Iceberg 설명서의 [Branching and tagging](https://iceberg.apache.org/docs/latest/branching/#overview) 섹션을 참조하세요.

1. 구성을 검토하고 **최적화 활성화**를 선택합니다.

   보존 옵티마이저가 실행되고 구성을 기반으로 이전 스냅샷이 만료될 때까지 몇 분 정도 기다립니다.

------
#### [ AWS CLI ]

 AWS Glue에서 새 Iceberg 테이블에 대한 스냅샷 보존을 활성화하려면 `retention` 유형의 테이블 옵티마이저를 생성하고 `table-optimizer-configuration`에서 `enabled` 필드를 `true`로 설정해야 합니다. AWS CLI 명령 `create-table-optimizer` 또는 `update-table-optimizer`를 사용할 수 있습니다. 또한 요구 사항을 기반으로 `snapshotRetentionPeriodInDays` 및 `numberOfSnapshotsToRetain` 등과 같은 보존 구성 필드를 지정해야 합니다.

다음 예제에서는 스냅샷 보존 옵티마이저를 활성화하는 방법을 보여줍니다. 계정 ID를 유효한 AWS 계정 ID로 바꿉니다. 데이터베이스 이름과 테이블 이름을 실제 Iceberg 테이블 이름 및 데이터베이스 이름으로 바꿉니다. `roleArn`을 스냅샷 보존 옵티마이저 실행에 필요한 권한이 있는 IAM 역할의 AWS 리소스 이름(ARN)과 이름으로 바꿉니다.

```
aws glue create-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":'true', "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}'\
  --type retention
```

 이 명령은 지정된 카탈로그, 데이터베이스 및 리전의 지정된 Iceberg 테이블에 대한 보존 옵티마이저를 생성합니다. table-optimizer-configuration은 사용할 IAM 역할 ARN을 지정하고, 옵티마이저를 활성화하고, 보존 구성을 설정합니다. 이 예제에서는 스냅샷을 7일 동안 보존하고, 최소 3개의 스냅샷을 유지하고, 만료된 파일을 정리합니다.
+  snapshotRetentionPeriodInDays - 만료 전에 스냅샷을 보존할 기간(일)입니다. 기본값은 `5`입니다.
+ numberOfSnapshotsToRetain - 보존 기간보다 오래된 경우에도 보관할 최소 스냅샷 수입니다. 기본값은 `1`입니다.
+ cleanExpiredFiles - 스냅샷이 만료된 후 만료된 데이터 파일을 삭제할지 여부를 나타내는 부울입니다. 기본값은 `true`입니다.

   true로 설정하면 이전 스냅샷은 테이블 메타데이터에서 제거되고 그에 속한 파일은 삭제됩니다. 이 파라미터를 false로 설정하면 이전 스냅샷은 테이블 메타데이터에서 제거되지만 그에 속한 파일은 스토리지에 분리된 파일로 남아 있습니다.

------
#### [ AWS API ]

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) 작업을 직접 호출하여 테이블에 대한 스냅샷 보존 옵티마이저를 활성화합니다.

------

압축을 활성화하면 **테이블 최적화** 탭에 다음과 같은 압축 세부 정보가 표시됩니다(약 15\$120분 후).

시작 시간  
스냅샷 보존 옵티마이저가 시작된 시간입니다. 값은 UTC 시간으로 표시된 타임스탬프입니다.

런타임  
옵티마이저가 작업을 완료하는 데 걸리는 시간을 나타냅니다. 값은 UTC 시간으로 표시된 타임스탬프입니다.

Status  
옵티마이저 실행의 상태입니다. 값은 성공 또는 실패입니다.

삭제된 데이터 파일  
삭제된 전체 파일 수입니다.

삭제된 매니페스트 파일  
삭제된 전체 매니페스트 파일 수입니다.

삭제된 매니페스트 목록  
삭제된 전체 매니페스트 목록 수입니다.

# 스냅샷 보존 옵티마이저 업데이트
<a name="update-snapshot-retention"></a>

 AWS Glue 콘솔, AWS CLI 또는 UpdateTableOptimizer API를 사용하여 특정 Apache Iceberg 테이블에 대한 스냅샷 보존 옵티마이저의 기존 구성을 업데이트할 수 있습니다.

------
#### [ Console ]

**스냅샷 보존 구성 업데이트**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. **데이터 카탈로그**를 선택하고 **테이블**을 선택합니다. 테이블 목록에서 스냅샷 보존 최적화 프로그램 구성을 업데이트하려는 Iceberg 테이블을 선택합니다.

1. **테이블 세부 정보** 페이지의 하단 섹션에서 **테이블 최적화 ** 탭을 선택한 다음, **편집**을 선택합니다. 페이지의 오른쪽 상단에 있는 **작업** 메뉴에서 **최적화** 아래 **편집**을 선택할 수도 있습니다.

1.  **최적화 편집** 페이지에서 원하는 대로 변경합니다.

1.  **저장**을 선택합니다.

------
#### [ AWS CLI ]

 AWS CLI를 사용하여 스냅샷 보존 옵티마이저를 업데이트하려면 다음 명령을 사용합니다.

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role"","enabled":'true', "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"retentionConfiguration":{"icebergConfiguration":{"snapshotRetentionPeriodInDays":7,"numberOfSnapshotsToRetain":3,"cleanExpiredFiles":'true'}}}' \
 --type retention
```

 이 명령은 지정된 카탈로그, 데이터베이스 및 리전의 지정된 테이블에 대한 보존 구성을 업데이트합니다. 주요 파라미터: 
+  snapshotRetentionPeriodInDays - 만료 전에 스냅샷을 보존할 기간(일)입니다. 기본값은 `1`입니다.
+ numberOfSnapshotsToRetain - 보존 기간보다 오래된 경우에도 보관할 최소 스냅샷 수입니다. 기본값은 `5`입니다.
+ cleanExpiredFiles - 스냅샷이 만료된 후 만료된 데이터 파일을 삭제할지 여부를 나타내는 부울입니다. 기본값은 `true`입니다.

   true로 설정하면 이전 스냅샷은 테이블 메타데이터에서 제거되고 그에 속한 파일은 삭제됩니다. 이 파라미터를 false로 설정하면 이전 스냅샷은 테이블 메타데이터에서 제거되지만 그에 속한 파일은 스토리지에 분리된 파일로 남아 있습니다.

------
#### [ API ]

테이블 옵티마이저를 업데이트하려면 `UpdateTableOptimizer` API를 사용할 수 있습니다. 이 API를 사용하면 압축, 보존 또는 분리된 파일 제거에 대해 기존 테이블 옵티마이저의 구성을 업데이트할 수 있습니다. 요청 파라미터:
+ catalogId(필수): 테이블을 포함하는 카탈로그의 ID 
+  databaseName(선택 사항): 테이블을 포함하는 데이터베이스의 이름 
+  tableName(선택 사항): 테이블의 이름 
+  type(필수): 테이블 옵티마이저의 유형(compaction, retention 또는 orphan\$1file\$1deletion) 
+  retentionConfiguration(필수): 역할 ARN, 활성화 상태, 보존 구성 및 분리된 파일 제거 구성을 포함하여 테이블 옵티마이저의 업데이트된 구성.

------

# 스냅샷 보존 옵티마이저 비활성화
<a name="disable-snapshot-retention"></a>

 AWS Glue 콘솔 또는 AWS CLI를 사용하여 특정 Apache Iceberg 테이블에 대한 스냅샷 보존 옵티마이저를 비활성화할 수 있습니다.

------
#### [ Console ]

**스냅샷 보존 비활성화**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 엽니다.

1. **데이터 카탈로그**를 선택하고 **테이블**을 선택합니다. 테이블 목록에서 스냅샷 보존 옵티마이저를 비활성화할 Iceberg 테이블을 선택합니다.

1. **테이블 세부 정보** 페이지 하단 섹션에서 **테이블 최적화**를 선택하고 **작업** 아래에서 **비활성화**, **스냅샷 보존**을 선택합니다.

   페이지의 오른쪽 상단에 있는 **작업** 메뉴에서 **최적화** 아래 **비활성화**를 선택할 수도 있습니다.

1.  확인 메시지에서 **비활성화**를 선택합니다. 스냅샷 보존 옵티마이저를 나중에 다시 활성화할 수 있습니다.

    확인한 후에는 스냅샷 보존 옵티마이저가 비활성화되고 스냅샷 보존 상태가 `Not enabled`가 됩니다.

------
#### [ AWS CLI ]

다음 예제에서 계정 ID를 유효한 AWS 계정 ID로 바꿉니다. 데이터베이스 이름과 테이블 이름을 실제 Iceberg 테이블 이름 및 데이터베이스 이름으로 바꿉니다. `roleArn`을 보존 옵티마이저 실행에 필요한 권한이 있는 IAM 역할의 AWS 리소스 이름(ARN)과 실제 이름으로 바꿉니다.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "vpcConfiguration":{"glueConnectionName":"glue_connection_name"}, "enabled":'false'}'\ 
  --type retention
```

------
#### [ AWS API ]

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 작업을 직접 호출하여 특정 테이블에 대한 스냅샷 보존 옵티마이저를 비활성화합니다.

------

# 분리된 파일 삭제
<a name="orphan-file-deletion"></a>

 AWS Glue Data Catalog에서는 Iceberg 테이블에서의 분리된 파일 제거를 허용합니다. 분리된 파일은 지정된 테이블 위치 아래의 Amazon S3 데이터 소스에 존재하고 Iceberg 테이블 메타데이터에서 추적되지 않으며 구성된 수명 제한보다 오래된 참조되지 않는 파일입니다. 이러한 분리된 파일은 압축, 파티션 삭제 또는 테이블 재작성과 같은 작업의 오류로 인해 시간이 지남에 따라 누적되어 불필요한 스토리지 공간을 차지할 수 있습니다.

AWS Glue의 분리된 파일 삭제 옵티마이저는 테이블 메타데이터와 실제 데이터 파일을 스캔하고, 분리된 파일을 식별 및 삭제하여 스토리지 공간을 확보합니다. 옵티마이저는 옵티마이저 생성 날짜 이후에 생성된 파일 중 구성된 삭제 기준을 충족하는 파일만 제거합니다. 옵티마이저 생성 날짜 또는 그 이전에 생성된 파일은 삭제되지 않습니다.

**분리된 파일 삭제 로직**

1. 날짜 확인 - 파일 생성 날짜를 옵티마이저 생성 날짜와 비교합니다. 파일 생성 날짜가 옵티마이저 생성 날짜보다 이전이거나 같으면 해당 파일을 건너뜁니다.

1. 옵티마이저 구성 확인 - 옵티마이저 생성 날짜 이후에 생성된 파일의 경우는 구성된 수명 제한을 기준으로 파일을 평가합니다. 삭제 기준과 일치하는 경우 옵티마이저가 파일을 삭제합니다. 기준과 일치하지 않는 파일은 건너뜁니다.

 데이터 카탈로그에서 분리된 파일 삭제 테이블 옵티마이저를 생성하여 분리된 파일 삭제를 시작할 수 있습니다.

**중요**  
 기본적으로 분리된 파일 삭제는 AWS Glue 테이블 위치 전체에서 파일을 평가합니다. API 파라미터를 사용하여 평가 범위를 제한하도록 하위 접두사를 구성할 수 있지만, 테이블 위치에 다른 데이터 소스 또는 테이블의 파일이 포함되어서는 안 됩니다. 테이블 위치가 다른 데이터 소스와 겹치는 경우, 서비스가 관련 없는 파일을 분리된 파일로 식별하고 삭제할 수 있습니다.

**Topics**
+ [분리된 파일 삭제 활성화](enable-orphan-file-deletion.md)
+ [분리된 파일 삭제 옵티마이저 업데이트](update-orphan-file-deletion.md)
+ [분리된 파일 삭제 비활성화](disable-orphan-file-deletion.md)

# 분리된 파일 삭제 활성화
<a name="enable-orphan-file-deletion"></a>

 AWS Glue 콘솔, AWS CLI 또는 AWS API를 사용하여 데이터 카탈로그의 Apache Iceberg 테이블에서 분리된 파일 삭제를 활성화할 수 있습니다. 새 테이블의 경우 Apache Iceberg를 테이블 형식으로 선택하고 테이블을 생성할 때 분리된 파일 삭제 옵티마이저를 활성화할 수 있습니다. 스냅샷 보존은 새 테이블에 대해 기본적으로 비활성화되어 있습니다.

------
#### [ Console ]

**분리된 파일 삭제 활성화**

1.  [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)에서 AWS Glue 콘솔을 열고 데이터 레이크 관리자, 테이블 작성자 또는 테이블에 대한 `glue:UpdateTable` 및 `lakeformation:GetDataAccess` 권한을 부여받은 사용자로 로그인합니다.

1. 탐색 창의 **데이터 카탈로그**에서 **테이블**을 선택합니다.

1. **테이블** 페이지에서 분리된 파일 삭제를 활성화하려는 Iceberg 테이블을 선택합니다.

   페이지 하단 섹션에서 **테이블 최적화** 탭을 선택하고 **작업**에서 **활성화**, **분리된 파일 삭제**를 선택합니다.

   페이지의 오른쪽 상단에 있는 **작업** 메뉴에서 **최적화** 아래 **활성화**를 선택할 수도 있습니다.

1. **최적화 활성화** 페이지의 **최적화 옵션**에서 **분리된 파일 삭제**를 선택합니다.

1. **기본 설정**을 사용하는 경우 3일 후에 모든 분리된 파일이 삭제됩니다. 분리된 파일을 특정 일수 동안 유지하려면 **설정 사용자 지정**을 선택합니다.

1. 다음으로 분리된 파일을 삭제하는 데 필요한 권한이 있는 IAM 역할을 선택합니다.

1. Iceberg 테이블 옵티마이저가 특정 가상 프라이빗 클라우드(VPC)에서 Amazon S3 버킷에 액세스해야 하는 보안 정책 구성이 있는 경우 AWS Glue 네트워크 연결을 생성하거나 기존 연결을 사용하세요.

   AWS Glue VPC 연결을 아직 설정하지 않은 경우 AWS Glue 콘솔 또는 AWS CLI/SDK를 사용하여 [커넥터에 대한 연결 생성](https://docs.aws.amazon.com/glue/latest/dg/creating-connections.html) 섹션의 단계에 따라 새 연결을 생성하세요.

1. **설정 사용자 지정**을 선택하는 경우 **분리된 파일 삭제 구성**에서 삭제하기 전에 파일을 유지할 기간(일)을 입력합니다. 옵티마이저 실행 간격을 지정할 수도 있습니다. 기본값은 24시간입니다.

1. **최적화 활성화**를 선택합니다.

------
#### [ AWS CLI ]

 AWS Glue에서 Iceberg 테이블에 대해 분리된 파일 삭제를 활성화하려면 `orphan_file_deletion` 유형의 테이블 옵티마이저를 생성하고 `enabled` 필드를 true로 설정해야 합니다. AWS CLI를 사용하여 Iceberg 테이블에 대해 분리된 파일 삭제 옵티마이저를 생성하려면 다음 명령을 사용할 수 있습니다.

```
aws glue create-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{
"glueConnectionName":"glue_connection_name"}, "orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":3, "location":'S3 location'}}}'\
 --type orphan_file_deletion
```

 이 명령은 지정된 Iceberg 테이블에 대해 분리된 파일 삭제 옵티마이저를 생성합니다. 주요 파라미터:
+ roleArn - S3 버킷과 Glue 리소스에 대한 액세스 권한이 있는 IAM 역할의 ARN.
+ enabled - true로 설정하면 옵티마이저를 활성화합니다.
+ orphanFileRetentionPeriodInDay - 분리된 파일을 삭제하기 전에 유지할 기간(일 단위, 최소 1일).
+ type - orphan\$1file\$1deletion으로 설정하면 분리된 파일 삭제 옵티마이저를 생성합니다.

 테이블 옵티마이저를 생성한 후에는 정기적으로 분리된 파일 삭제를 실행합니다(활성화된 상태로 두면 하루에 한 번). `list-table-optimizer-runs` API를 사용하여 실행을 확인할 수 있습니다. 분리된 파일 삭제 작업은 테이블의 Iceberg 메타데이터에서 추적되지 않는 파일을 식별하고 삭제합니다.

------
#### [ API ]

[CreateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-CreateTableOptimizer) 작업을 직접 호출하여 특정 테이블에 대한 분리된 파일 삭제 옵티마이저를 생성합니다.

------

# 분리된 파일 삭제 옵티마이저 업데이트
<a name="update-orphan-file-deletion"></a>

 AWS Glue 콘솔, AWS CLI 또는 `UpdateTableOptimizer` 작업을 사용하여 분리된 파일의 보존 기간 변경이나 옵티마이저에서 사용하는 IAM 역할 변경 등 분리된 파일 삭제 옵티마이저의 구성을 수정할 수 있습니다.

------
#### [ AWS Management Console ]

**분리된 파일 삭제 옵티마이저 업데이트**

1.  **데이터 카탈로그**를 선택하고 **테이블**을 선택합니다. 테이블 목록에서 분리된 파일 삭제 옵티마이저 구성을 업데이트하려는 테이블을 선택합니다.

1. **테이블 세부 정보** 페이지의 하단 섹션에서 **테이블 최적화**를 선택한 다음, **편집**을 선택합니다.

1.  **최적화 편집** 페이지에서 원하는 대로 변경합니다.

1.  **저장**을 선택합니다.

------
#### [ AWS CLI ]

 AWS Glue에서 `update-table-optimizer` 호출을 사용하여 분리된 파일 삭제 옵티마이저를 업데이트할 수 있습니다. 이를 통해 업데이트된 `OrphanFileRetentionPeriodInDays`를 지정할 수 있는 `icebergConfiguration` 필드의 `OrphanFileDeletionConfiguration`을 수정하여 분리된 파일을 보존할 기간(일)을 설정하고, 분리된 파일을 삭제할 Iceberg 테이블 위치를 지정할 수 있습니다.

```
aws glue update-table-optimizer \
 --catalog-id 123456789012 \
 --database-name iceberg_db \
 --table-name Iceberg_table \
 --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role","enabled":true, "vpcConfiguration":{"glueConnectionName":"glue_connection_name"},"orphanFileDeletionConfiguration":{"icebergConfiguration":{"orphanFileRetentionPeriodInDays":5}}}' \
 --type orphan_file_deletion
```

------
#### [ API ]

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 작업을 직접 호출하여 테이블에 대해 분리된 파일 삭제 옵티마이저를 업데이트합니다.

------

 

# 분리된 파일 삭제 비활성화
<a name="disable-orphan-file-deletion"></a>

 AWS Glue 콘솔 또는 AWS CLI를 사용하여 특정 Apache Iceberg 테이블에 대한 분리된 파일 삭제 옵티마이저를 비활성화할 수 있습니다.

------
#### [ Console ]

**분리된 파일 삭제 비활성화**

1. **데이터 카탈로그**를 선택하고 **테이블**을 선택합니다. 테이블 목록에서 분리된 파일 삭제 옵티마이저를 비활성화할 Iceberg 테이블을 선택합니다.

1. **테이블 세부 정보** 페이지 하단 섹션에서 **테이블 최적화** 탭을 선택합니다.

1. **작업**을 선택한 다음, **비활성화**, **분리된 파일 삭제**를 선택합니다.

   **작업** 메뉴의 **최적화**에서 **비활성화**를 선택할 수도 있습니다.

1.  확인 메시지에서 **비활성화**를 선택합니다. 분리된 파일 삭제 옵티마이저를 나중에 다시 활성화할 수 있습니다.

    확인한 이후 분리된 파일 삭제 옵티마이저가 비활성화되고 분리된 파일 삭제 상태가 `Not enabled`가 됩니다.

------
#### [ AWS CLI ]

다음 예제에서 계정 ID를 유효한 AWS 계정 ID로 바꿉니다. 데이터베이스 이름과 테이블 이름을 실제 Iceberg 테이블 이름 및 데이터베이스 이름으로 바꿉니다. `roleArn`을 옵티마이저 비활성화에 필요한 권한이 있는 IAM 역할의 AWS 리소스 이름(ARN)과 실제 이름으로 바꿉니다.

```
aws glue update-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --table-optimizer-configuration '{"roleArn":"arn:aws:iam::123456789012:role/optimizer_role", "enabled":'false'}'\ 
  --type orphan_file_deletion
```

------
#### [ API ]

[UpdateTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-UpdateTableOptimizer) 작업을 직접 호출하여 특정 테이블에 대한 스냅샷 보존 옵티마이저를 비활성화합니다.

------

# 최적화 세부 정보 보기
<a name="view-optimization-status"></a>

AWS Glue 콘솔, AWS CLI 또는 AWS API 작업을 사용하여 Apache Iceberg의 최적화 상태를 볼 수 있습니다.

------
#### [ Console ]

**Iceberg 테이블의 최적화 상태 보기(콘솔)**
+ AWS Glue 콘솔에서 **데이터 카탈로그**의 **테이블** 목록에서 Iceberg 테이블을 선택하면 Iceberg 테이블의 최적화 상태를 볼 수 있습니다. **테이블 최적화**에서 **모두 보기**를 선택합니다.  
![\[압축 활성화 옵션이 있는 Apache Iceberg 테이블 세부 정보 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/table-list-compaction-status.png)

------
#### [  AWS CLI  ]

AWS CLI를 사용하여 최적화 세부 정보를 볼 수 있습니다.

다음 예제에서 계정 ID를 유효한 AWS 계정 ID로, 데이터베이스 이름과 테이블 이름을 실제 Iceberg 데이터베이스 이름과 테이블 이름으로 바꿉니다. `type`의 경우 최적화 유형이 제공됩니다. 사용 가능한 값은 `compaction`, `retention` 및 `orphan-file-deletion`입니다.
+ **테이블의 마지막 압축 실행 세부 정보를 가져오려면**

  ```
  aws get-table-optimizer \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ 다음 예제를 사용하여 특정 테이블에 대한 옵티마이저 기록을 검색할 수 있습니다.

  ```
  aws list-table-optimizer-runs \
    --catalog-id 123456789012 \
    --database-name iceberg_db \
    --table-name iceberg_table \
    --type compaction
  ```
+ 다음 예제에서는 최적화 실행 결과를 검색하는 방법과 여러 옵티마이저의 구성 세부 정보를 보여줍니다. 최대 20개의 옵티마이저를 지정할 수 있습니다.

  ```
  aws glue batch-get-table-optimizer \
  --entries '[{"catalogId":"123456789012", "databaseName":"iceberg_db", "tableName":"iceberg_table", "type":"compaction"}]'
  ```

------
#### [ API ]
+ `GetTableOptimizer` 작업을 사용하여 옵티마이저의 마지막 실행 세부 정보를 검색합니다.
+  `ListTableOptimizerRuns` 작업을 사용하여 특정 테이블에서 지정된 옵티마이저의 기록을 검색할 수 있습니다. API 호출 한 번으로 옵티마이저 20개를 지정할 수 있습니다.
+ [BatchGetTableOptimizer](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-table-optimizers.html#aws-glue-api-table-optimizers-BatchGetTableOptimizer) 작업을 사용하여 계정에서 여러 옵티마이저에 대한 구성 세부 정보를 검색합니다.

------

# Amazon CloudWatch 지표 보기
<a name="view-optimization-metrics"></a>

 테이블 옵티마어지를 성공적으로 실행한 후 서비스는 최적화 작업 성능에 대한 Amazon CloudWatch 지표를 생성합니다. **CloudWatch 지표**로 이동하여 **지표**, **모든 지표**를 선택할 수 있습니다. 특정 네임스페이스(예: AWS Glue), 테이블 이름 또는 데이터베이스 이름을 기준으로 지표를 필터링할 수 있습니다.

 자세한 내용은 **Amazon CloudWatch 사용 설명서의 [사용 가능한 지표 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)를 참조하세요.

****압축****
+ 압축된 바이트 수 
+ 압축된 파일 수
+ 작업에 할당된 DPU 수 
+ 작업 기간(시간) 

****스냅샷 보존****
+ 삭제된 데이터 파일 수 
+ 삭제된 매니페스트 파일 수
+ 삭제된 매니페스트 목록 수 
+ 작업 기간(시간)

****분리된 파일 삭제****
+ 삭제된 분리된 파일 수 
+ 작업 기간(시간) 

# 옵티마이저 삭제
<a name="delete-optimizer"></a>

AWS CLI 또는 AWS API 작업을 사용하여 테이블의 옵티마이저 및 관련 메타데이터를 삭제할 수 있습니다.

다음 AWS CLI 명령을 실행하여 테이블의 최적화 기록을 삭제합니다. 카탈로그 ID, 데이터베이스 이름 및 테이블 이름과 함께 `type` 옵티마이저를 지정해야 합니다. 사용 가능한 값은 `compaction`, `retention` 및 `orphan_file_deletion`입니다.

```
aws glue delete-table-optimizer \
  --catalog-id 123456789012 \
  --database-name iceberg_db \
  --table-name iceberg_table \
  --type compaction
```

 `DeleteTableOptimizer` 작업을 사용하여 테이블의 옵티마이저를 삭제합니다.

# 고려 사항 및 제한 사항
<a name="optimizer-notes"></a>

 이 섹션에는 AWS Glue Data Catalog 내에서 테이블 최적화 프로그램을 사용할 때 고려할 사항이 포함되어 있습니다.

## 내구성 및 정확성
<a name="durability-correctness"></a>

**S3 테이블 위치:**

여러 AWS Glue Data Catalog 테이블이 동일한 Amazon S3 위치를 공유하고 옵티마이저를 활성화한 경우 한 테이블의 스냅샷 보존 또는 분리된 파일 삭제 옵티마이저는 다른 테이블에서 여전히 참조되는 파일을 삭제할 수 있습니다. 옵티마이저가 활성화된 각 테이블에 다른 데이터베이스의 테이블을 비롯하여 다른 테이블과 공유되지 않는 고유한 Amazon S3 위치가 있는지 확인합니다.

**S3 수명 주기 만료:**

Iceberg 테이블 스토리지 위치에 적용되는 Amazon S3 수명 주기 만료 규칙은 활성 스냅샷에서 여전히 참조되는 매니페스트 및 데이터 파일을 삭제할 수 있습니다. 버킷에 수명 주기 만료 규칙이 있는 경우 해당 규칙에서 Iceberg 테이블 스토리지 경로를 제외해야 합니다.

## 관리형 데이터 압축에 지원되는 형식 및 제한 사항
<a name="compaction-notes"></a>

데이터 압축은 암호화된 테이블에서 데이터를 읽는 것을 비롯하여, 데이터 읽기 및 쓰기를 위한 다양한 데이터 형식 및 압축 형식을 지원합니다.

**동시성 제어:**

 Apache Iceberg는 여러 작성자가 동시에 작업을 수행할 수 있도록 낙관적 동시성 제어를 지원합니다. 충돌은 커밋 시 감지되고 해결됩니다. 스트리밍 파이프라인으로 작업할 때는 동시 쓰기를 효과적으로 처리할 수 있도록 테이블 속성 및 압축 설정을 통해 적절한 재시도 설정을 구성합니다. 자세한 지침은 AWS Big Data 블로그의 [managing concurrent writes in Iceberg tables](https://aws.amazon.com/blogs/big-data/manage-concurrent-write-conflicts-in-apache-iceberg-on-the-aws-glue-data-catalog/)를 참조하세요.

**압축 재시도:**

 압축 작업이 4회 연속으로 실패하면 불필요한 컴퓨팅 리소스 소비를 방지하기 위해 AWS Glue 카탈로그 테이블 최적화 기능이 최적화 프로그램을 자동으로 일시 중지합니다. 먼저 로그를 조사하여 압축이 반복적으로 실패하는 이유를 알아보세요. 압축 최적화를 재개하려면 AWS Glue 콘솔 또는 API를 통해 최적화 프로그램을 다시 활성화하면 됩니다.

 **데이터 압축은 다음을 지원합니다.**
+ **암호화** - 데이터 압축은 기본 Amazon S3 암호화(SSE-S3) 및 서버 측 KMS 암호화(SSE-KMS)만 지원합니다.
+ **압축 전략** - Binpack, 정렬, Z형 정렬
+ 기본 데이터를 저장하는 Amazon S3 버킷이 다른 계정에 있는 경우 데이터 카탈로그가 있는 계정에서 압축을 실행할 수 있습니다. 이렇게 하려면 압축 역할에 Amazon S3 버킷에 대한 액세스 권한이 필요합니다.

 **데이터 압축은 현재 다음을 지원하지 않습니다.**
+ **교차 계정 테이블에서의 압축** - 교차 계정 테이블에서는 압축을 실행할 수 없습니다.
+ **교차 리전 테이블에서의 압축** - 교차 리전 테이블에서는 압축을 실행할 수 없습니다.
+ **리소스 링크에서 압축 활성화**
+ **Amazon S3 Express One Zone 스토리지 클래스의 테이블 ** - Amazon S3 Express One Zone Iceberg 테이블에서는 압축을 실행할 수 없습니다.
+ **Z-order 압축 전략에서 지원하지 않는 데이터 유형:**
  + 10진수
  + TimestampWithoutZone

## 스냅샷 보존 및 분리된 파일 삭제 최적화 프로그램에 대한 고려 사항
<a name="retention-notes"></a>

스냅샷 보존 및 분리된 파일 삭제 최적화 프로그램에 다음 고려 사항이 적용됩니다.
+ 스냅샷 보존 및 분리된 파일 삭제 프로세스의 최대 삭제량은 실행당 1,000,000개의 파일입니다. 만료된 스냅샷을 삭제할 때 삭제할 수 있는 파일 수가 1,000,000개를 초과하면 해당 임곗값을 초과하는 나머지 파일은 계속 분리된 파일로 테이블 스토리지에 남아 있게 됩니다.
+ 스냅샷은 두 기준(보존할 최소 스냅샷 수 및 지정된 보존 기간)이 모두 충족되는 경우에만 스냅샷 보존 최적화 프로그램에서 보존합니다.
+ 스냅샷 보존 최적화 프로그램은 Apache Iceberg에서 만료된 스냅샷 메타데이터를 삭제하여 만료된 스냅샷에 대한 시간 이동 쿼리를 방지하고 선택적으로 연결된 데이터 파일을 삭제합니다.
+  분리된 파일 삭제 최적화 프로그램은 생성 시간이 최적화 프로그램이 실행된 시점부터 분리된 파일 삭제 보존 기간보다 이전인 경우 Iceberg 메타데이터에서 더 이상 참조하지 않는 분리된 데이터 및 메타데이터 파일을 삭제합니다.
+ Apache Iceberg는 특정 스냅샷 상태에 대한 명명된 포인터에 해당하는 브랜치와 태그를 통해 버전 제어를 용이하게 합니다. 각 브랜치와 태그는 각 수준에서 정의된 보존 정책에 따라 자체 독립 수명 주기를 따릅니다. AWS Glue Data Catalog 최적화 프로그램은 이러한 수명 주기 정책을 고려하여 지정된 보존 규칙을 준수하도록 합니다. 브랜치 및 태그 수준 보존 정책은 최적화 프로그램 구성보다 우선합니다.

   자세한 내용은 Apache Iceberg 설명서의 [Branching and Tagging](https://iceberg.apache.org/docs/nightly/branching/)을 참조하세요.
+ 스냅샷 보존 및 분리된 파일 삭제 최적화 프로그램은 구성된 파라미터에 따라 정리 대상인 파일을 삭제합니다. 적절한 버킷에 S3 버전 관리 및 수명 주기 정책을 구현하여 파일 삭제에 대한 제어를 강화합니다.

   버전 관리 설정 및 수명 주기 규칙 생성에 대한 자세한 지침은 [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) 섹션을 참조하세요.
+  적절한 고립 파일을 결정하려면 제공된 테이블 위치와 하위 경로가 다른 테이블 또는 데이터 소스의 데이터와 겹치거나 포함되지 않도록 해야 합니다. 경로가 겹치면 의도하지 않은 파일 삭제로 인해 복구할 수 없는 데이터 손실 위험이 있습니다.

## OversizedAllocationException 예외 디버깅
<a name="debug-exception"></a>

`OversizedAllocationException` 예외를 해결하려면
+ 벡터화된 리더의 배치 크기를 줄이고 확인합니다. 기본 배치 크기는 5000입니다. 이 설정은 `read.parquet.vectorization.batch-size`에서 제어합니다.
  + 여러 변형 후에도 작동하지 않는 경우 벡터화를 끕니다. 이 설정은 `read.parquet.vectorization.enabled`에서 제어합니다.

# 테이블 옵티마이저 지원 리전
<a name="regions-optimizers"></a>

AWS Glue Data Catalog의 테이블 최적화 기능(압축, 스냅샷 보존 및 분리된 파일 삭제)은 다음 AWS 리전에서 사용할 수 있습니다.
+ 아시아 태평양(도쿄)
+ 아시아 태평양(서울)
+ 아시아 태평양(뭄바이)
+ 아시아 태평양(싱가포르)
+ 아시아 태평양(시드니)
+ 아시아 태평양(자카르타)
+ 캐나다(중부)
+ 유럽(아일랜드)
+ 유럽(런던)
+ 유럽(프랑크푸르트)
+ 유럽(스톡홀름)
+ 미국 동부(버지니아 북부)
+ 미국 동부(오하이오)
+ 미국 서부(오리건)
+ 남아메리카(상파울루)

# Iceberg 테이블의 쿼리 성능 최적화
<a name="iceberg-column-statistics"></a>

Apache Iceberg는 대규모 분석 데이터세트를 위한 고성능 오픈 테이블 형식입니다. AWS Glue에서는 Iceberg 테이블의 각 열에 대한 고유 값의 수(NDV) 계산 및 업데이트를 지원합니다. 이러한 통계를 통해 대규모 데이터세트를 사용하는 데이터 엔지니어와 과학자의 쿼리 최적화, 데이터 관리 및 성능 효율성을 높일 수 있습니다.

 AWS Glue에서는 Iceberg 테이블의 각 열에 있는 고유 값의 수를 추정하고 Iceberg 테이블 스냅샷과 연결된 Amazon S3의 [Puffin](https://iceberg.apache.org/puffin-spec/) 파일에 저장합니다. Puffin은 인덱스, 통계, 스케치와 같은 메타데이터를 저장하도록 설계된 Iceberg 파일 형식입니다. 스냅샷과 연결된 Puffin 파일에 스케치를 저장하면 트랜잭션 일관성을 유지하면서 NDV 통계를 최신으로 유지할 수 있습니다.

AWS Glue 콘솔 또는 AWS CLI를 사용하여 열 통계 생성 작업을 실행하도록 구성할 수 있습니다. 프로세스를 시작하면 백그라운드에서 AWS Glue가 Spark 작업을 시작하고 데이터 카탈로그의 AWS Glue 테이블 메타데이터를 업데이트합니다. AWS Glue 콘솔 또는 AWS CLI를 사용하거나 [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html) API 작업을 직접적으로 호출하여 열 통계를 볼 수 있습니다.

**참고**  
AWS Lake Formation 권한을 사용하여 테이블에 대한 액세스를 제어하는 경우 열 통계 작업에서 맡은 역할을 수행하려면 통계를 생성하기 위한 전체 테이블 액세스 권한이 필요합니다.

**Topics**
+ [열 통계 생성을 위한 사전 요구 사항](iceberg-column-stats-prereqs.md)
+ [Iceberg 테이블의 열 통계 생성](iceberg-generate-column-stats.md)
+ [다음 사항도 참조하세요.](#see-also-iceberg-stats)

# 열 통계 생성을 위한 사전 요구 사항
<a name="iceberg-column-stats-prereqs"></a>

Iceberg 테이블의 열 통계를 생성하거나 업데이트하기 위해 통계 생성 작업은 사용자를 대신하여 AWS Identity and Access Management(IAM) 역할을 수임합니다. 역할에 부여된 권한에 따라 열 통계 생성 작업은 Amazon S3 데이터 스토어에서 데이터를 읽을 수 있습니다.

열 통계 생성 작업을 구성하면 AWS Glue에서 `AWSGlueServiceRole` AWS 관리형 정책과 지정된 데이터 소스에 대한 필수 인라인 정책을 포함하는 역할 생성을 허용합니다.

열 통계 생성에 대한 기존 역할을 지정하는 경우 `AWSGlueServiceRole` 정책 또는 이에 상응하는 것(또는 이 정책의 범위가 축소된 버전)과 필수 인라인 정책이 포함되어 있는지 확인합니다.

필요한 권한에 대한 자세한 정보는 [열 통계 생성을 위한 사전 요구 사항](column-stats-prereqs.md) 섹션을 참조하세요.

# Iceberg 테이블의 열 통계 생성
<a name="iceberg-generate-column-stats"></a>

다음 단계에 따라 AWS Glue 콘솔 또는 AWS CLI를 사용하거나 **StartColumnStatisticsTaskRun** 작업을 실행하여 데이터 카탈로그에서 통계를 생성하는 일정을 구성하거나 실행합니다.

**열 통계 생성**

1. AWS Glue 콘솔([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/))에 로그인합니다.

1. 데이터 카탈로그에서 **테이블**을 선택합니다.

1. 목록에서 Iceberg 테이블을 선택합니다.

1. **작업** 메뉴에서 **열 통계**, **요청 시 생성**을 선택합니다.

   **테이블** 페이지 하단 섹션의 **열 통계** 탭에서 **통계 생성** 버튼을 선택해도 됩니다.

1. **통계 생성** 페이지에서 통계 생성 세부 정보를 입력합니다. [일정에 따라 열 통계 생성](generate-column-stats.md) 섹션의 6\$111단계에 따라 Iceberg 테이블에 대한 통계 생성을 구성하세요.

   [온디맨드로 열 통계 생성](column-stats-on-demand.md)의 지침에 따라 온디맨드로 열 통계를 생성하도록 선택할 수도 있습니다.
**참고**  
샘플링 옵션은 Iceberg 테이블에 사용할 수 없습니다.

   AWS Glue에서는 Amazon S3 위치의 지정된 스냅샷 ID로 커밋된 새 Puffin 파일에 대한 Iceberg 테이블의 각 열에 대한 고유 값 수를 계산합니다.

## 다음 사항도 참조하세요.
<a name="see-also-iceberg-stats"></a>
+ [열 통계 보기](view-column-stats.md)
+ [컬럼 통계 태스크 실행 보기](view-stats-run.md)
+ [열 통계 작업 실행 중지](stop-stats-run.md)
+ [컬럼 통계 삭제](delete-column-stats.md)