

# 열 통계를 사용한 쿼리 성능 최적화
<a name="column-statistics"></a>

추가 데이터 파이프라인을 설정하지 않고도 Parquet, ORC, JSON, ION, CSV 및 XML과 같은 데이터 형식의 AWS Glue Data Catalog 테이블에 대한 열 수준 통계를 계산할 수 있습니다. 열 통계는 열 내 값에 대한 통찰력을 얻어 데이터 프로필을 이해하는 데 도움이 됩니다.

Data Catalog는 최소값, 최대값, 총 null 값, 총 고유 값, 값의 평균 길이, 실제 값의 총 발생 횟수 등과 같은 열 값에 대한 통계 생성을 지원합니다. Amazon Redshift 및 Amazon Athena와 같은 AWS 분석 서비스에서는 이러한 열 통계를 사용하여 쿼리 실행 계획을 생성하고 쿼리 성능을 향상시키는 최적의 계획을 선택할 수 있습니다.

다음은 열 통계 생성에 대한 세 가지 시나리오입니다.

 **자동**   
AWS Glue는 카탈로그 수준에서 자동 열 통계 생성을 지원하므로 AWS Glue Data Catalog의 새 테이블에 대한 통계를 자동으로 생성할 수 있습니다.

**예약됨**  
AWS Glue는 열 통계 생성 예약을 지원하며, 반복 일정에 따라 자동으로 실행할 수 있습니다.  
예약된 통계 계산을 통해 열 통계 작업은 최소, 최대, 평균과 같은 전체 테이블 수준 통계를 새 통계로 업데이트하고 쿼리 엔진에 쿼리 실행을 최적화하기 위한 정확한 최신 통계를 제공합니다.

**온디맨드**  
필요할 때마다 온디맨드 방식으로 열 통계를 생성하려면 이 옵션을 사용합니다. 이 옵션은 임시 분석이나 통계를 즉시 계산해야 하는 경우에 유용합니다.

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

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

 다음 비디오에서는 열 통계를 사용하여 쿼리 성능을 향상시키는 방법을 설명합니다.

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


**Topics**
+ [열 통계 생성을 위한 사전 요구 사항](column-stats-prereqs.md)
+ [자동 열 통계 생성](auto-column-stats-generation.md)
+ [일정에 따라 열 통계 생성](generate-column-stats.md)
+ [온디맨드로 열 통계 생성](column-stats-on-demand.md)
+ [열 통계 보기](view-column-stats.md)
+ [컬럼 통계 태스크 실행 보기](view-stats-run.md)
+ [열 통계 작업 실행 중지](stop-stats-run.md)
+ [컬럼 통계 삭제](delete-column-stats.md)
+ [고려 사항 및 제한 사항](column-stats-notes.md)

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

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

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

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

**참고**  
 Lake Formation에서 관리하는 테이블에 대한 통계를 생성하려면 통계 생성에 사용되는 IAM 역할에 전체 테이블 액세스 권한이 필요합니다.

열 통계 생성 작업을 구성하면 AWS Glue에서 `AWSGlueServiceRole` AWS 관리형 정책과 지정된 데이터 소스에 대한 필수 인라인 정책을 포함하는 역할 생성을 허용합니다. 역할을 생성하고 아래 정책에 나열된 권한에 연결한 후 열 통계 생성 작업에 추가할 수도 있습니다.

**열 통계 생성을 위한 IAM 역할을 생성하는 방법**

1. IAM 역할을 생성하려면 [AWS Glue의 IAM 역할 생성](https://docs.aws.amazon.com/glue/latest/dg/create-an-iam-role.html)을 참조하십시오.

1. 기존 역할을 업데이트하려면 IAM 콘솔에서 열 통계 생성 프로세스에 사용되는 IAM 역할로 이동합니다.

1. **권한 추가** 탭에서 **정책 연결**을 선택합니다. 새로 열린 브라우저 창에서 `AWSGlueServiceRole` AWS 관리형 정책을 선택합니다.

1. Amazon S3 데이터 위치에서 데이터를 읽을 수 있는 권한도 포함해야 합니다.

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

1. **정책 생성** 페이지에서 **JSON** 탭을 선택합니다. 다음 `JSON` 코드를 정책 편집기 필드에 복사합니다.
**참고**  
다음 정책에서는 계정 ID를 유효한 AWS 계정로 바꾸고, `region`을 테이블의 리전으로, `bucket-name`을 Amazon S3 버킷 이름으로 바꿉니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3BucketAccess",
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject"
               ],
               "Resource": [
               	"arn:aws:s3:::amzn-s3-demo-bucket/*",
   							"arn:aws:s3:::amzn-s3-demo-bucket"
               ]
           }
        ]
   }
   ```

------

1. (선택 사항) Lake Formation 권한을 사용하여 데이터에 대한 액세스를 제공하는 경우 IAM 역할에 `lakeformation:GetDataAccess` 권한이 필요합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "LakeFormationDataAccess",
         "Effect": "Allow",
         "Action": "lakeformation:GetDataAccess",
         "Resource": [
           "*"
         ]
       }
     ]
   }
   ```

------

    Amazon S3 데이터 위치가 Lake Formation에 등록되어 있고 열 통계 생성 작업이 맡는 IAM 역할에 테이블에 대한 `IAM_ALLOWED_PRINCIPALS` 그룹 권한이 부여되지 않은 경우, 이 역할에는 Lake Formation `ALTER`와 테이블에 대한 `DESCRIBE` 권한이 필요합니다. Amazon S3 버킷을 등록하는 데 사용되는 역할에는 테이블에 대한 Lake Formation `INSERT` 및 `DELETE` 권한이 필요합니다.

   Amazon S3 데이터 위치가 Lake Formation에 등록되지 않았고 IAM 역할에 테이블에 대한 `IAM_ALLOWED_PRINCIPALS` 그룹 권한이 부여되지 않은 경우, 해당 역할에는 테이블에 대한 Lake Formation `ALTER`, `DESCRIBE`, `INSERT`, `DELETE` 권한이 필요합니다.

1. 카탈로그 수준 `Automatic statistics generation` 옵션을 활성화한 경우 IAM 역할에는 기본 Data Catalog에 대한 `glue:UpdateCatalog` 권한 또는 Lake Formation `ALTER CATALOG` 권한이 있어야 합니다. `GetCatalog` 작업을 사용하여 카탈로그 속성을 확인할 수 있습니다.

1. (선택 사항) 암호화된 Amazon CloudWatch Logs을 기록하는 열 통계 생성 작업에는 키 정책 내 다음 권한이 있어야 합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "CWLogsKmsPermissions",
         "Effect": "Allow",
         "Action": [
           "logs:CreateLogGroup",
           "logs:CreateLogStream",
           "logs:PutLogEvents",
           "logs:AssociateKmsKey"
         ],
         "Resource": [
           "arn:aws:logs:us-east-1:111122223333:log-group:/aws-glue:*"
         ]
       },
       {
         "Sid": "KmsPermissions",
         "Effect": "Allow",
         "Action": [
           "kms:GenerateDataKey",
           "kms:Decrypt",
           "kms:Encrypt"
         ],
         "Resource": [
           "arn:aws:kms:us-east-1:111122223333:key/arn of key used for ETL cloudwatch encryption"
         ],
         "Condition": {
           "StringEquals": {
             "kms:ViaService": [
               "glue.us-east-1.amazonaws.com"
             ]
           }
         }
       }
     ]
   }
   ```

------

1. 열 통계를 실행하는 데 사용하는 역할에는 해당 역할에 대한 `iam:PassRole` 권한이 있어야 합니다.

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

****  

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

------

1. 열 통계 생성을 위한 IAM 역할을 생성할 때 해당 역할에는 서비스가 역할을 수임할 수 있도록 하는 다음과 같은 신뢰 정책도 포함되어야 합니다.

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

****  

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

------

# 자동 열 통계 생성
<a name="auto-column-stats-generation"></a>

열 통계 자동 생성을 사용하면 AWS Glue Data Catalog의 새 테이블에 대한 통계 생성을 예약하고 자동으로 계산할 수 있습니다. 자동 통계 생성을 활성화하면 Data Catalog는 개별 버킷 경로와 함께 Parquet, JSON, CSV, XML, ORC, ION, Apache Iceberg 등 특정 데이터 형식의 새 테이블을 검색합니다. 일회성 카탈로그 구성을 사용하면 Data Catalog가 이러한 테이블에 대한 통계를 생성합니다.

 데이터 레이크 관리자는 Lake Formation 콘솔에서 기본 카탈로그를 선택하고 `Optimization configuration` 옵션을 사용하여 테이블 통계를 활성화하여 통계 생성을 구성할 수 있습니다. Data Catalog에서 새 테이블을 생성하거나 기존 테이블을 업데이트하면 Data Catalog는 Apache Iceberg 테이블의 고유 값(NDV) 수와 지원되는 다른 파일 형식의 null 수, 최댓값, 최솟값 및 평균 길이와 같은 추가 통계를 매주 수집합니다.

테이블 수준에서 통계 생성을 구성했거나 이전에 테이블에 대한 통계 생성 설정을 삭제한 경우 이러한 테이블별 설정이 자동 열 통계 생성에 대한 기본 카탈로그 설정보다 우선합니다.

 자동 통계 생성 작업은 테이블의 레코드 중 50%를 분석하여 통계를 계산합니다. 자동 열 통계 생성을 통해, Amazon Athena 및 Amazon Redshift Spectrum과 같은 쿼리 엔진에서 쿼리 성능을 높이고 잠재적 비용을 절감하는 데 사용할 수 있는 주간 지표가 Data Catalog에서 유지 관리됩니다. AWS Glue API 또는 콘솔을 사용하여 수작업 없이 자동화된 프로세스를 통한 통계 생성을 예약할 수 있습니다.

**Topics**
+ [카탈로그 수준 자동 통계 생성 활성화](enable-auto-column-stats-generation.md)
+ [자동 테이블 수준 설정 보기](view-auto-column-stats-settings.md)
+ [카탈로그 수준 열 통계 생성 비활성화](disable-auto-column-stats-generation.md)

# 카탈로그 수준 자동 통계 생성 활성화
<a name="enable-auto-column-stats-generation"></a>

Data Catalog에서 모든 새 Apache Iceberg 테이블 및 비OTF 테이블(Parquet, JSON, CSV, XML, ORC, ION) 형식의 테이블에 대해 자동 열 통계 생성을 활성화할 수 있습니다. 테이블을 생성한 후 열 통계 설정을 수동으로 명시적으로 업데이트할 수도 있습니다.

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

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

**계정 수준에서 자동 열 통계 생성을 활성화하려면**

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

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

1. **카탈로그 요약** 페이지의 **최적화 구성**에서 **편집**을 선택합니다.  
![\[스크린샷은 열 통계를 생성하는 데 사용할 수 있는 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-column-stats-auto.png)

1. **테이블 최적화 구성** 페이지에서 **카탈로그의 테이블에 대해 자동 통계 생성 활성화** 옵션을 선택합니다.  
![\[스크린샷은 열 통계를 생성하는 데 사용할 수 있는 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/edit-optimization-option.jpg)

1. 기존 IAM 역할을 선택하거나 열 통계 작업을 실행하는 데 필요한 권한이 있는 새 역할을 생성합니다.

1. **제출**을 선택합니다.

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

AWS CLI를 통해 카탈로그 수준 통계 수집을 활성화할 수도 있습니다. AWS CLI를 사용하여 테이블 수준 통계 수집을 구성하려면 다음 명령을 실행합니다.

```
aws glue update-catalog --cli-input-json '{
    "name": "123456789012",
    "catalogInput": {
        "description": "Updating root catalog with role arn",
        "catalogProperties": {
            "customProperties": {
                "ColumnStatistics.RoleArn": "arn:aws:iam::"123456789012":role/service-role/AWSGlueServiceRole",
                "ColumnStatistics.Enabled": "true"
            }
        }
    }
}'
```

 위의 명령은 카탈로그 수준 통계 생성을 위해 다음과 같은 키-값 페어를 포함하는 `CatalogProperties` 구조를 처리하는 AWS Glue의 `UpdateCatalog` 작업을 호출합니다.
+ ColumnStatistics.RoleArn – 카탈로그 수준 통계 생성에서 트리거되는 모든 작업에 사용할 IAM 역할 ARN
+ ColumnStatistics.Enabled – 카탈로그 수준 설정의 활성화 여부를 나타내는 부울

------

# 자동 테이블 수준 설정 보기
<a name="view-auto-column-stats-settings"></a>

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

 자동 통계 생성이 활성화된 테이블은 다음 속성 중 하나를 따라야 합니다.
+ org.apache.hadoop으로 시작하고 `TableType`이 `EXTERNAL_TABLE`인 `InputSerdeLibrary` 사용
+ `com.amazon.ion`으로 시작하고 `TableType`이 `EXTERNAL_TABLE`인 `InputSerdeLibrary` 사용
+ table\$1type 포함: 파라미터 구조에 'ICEBERG' 포함.

 테이블을 생성하거나 업데이트한 후 테이블 세부 정보에서 통계 생성을 확인할 수 있습니다. `Statistics generation summary`의 경우 `Schedule` 속성 세트가 `AUTO`로 설정되어 있고 `Statistics configuration` 값이 `Inherited from catalog`입니다. 다음 설정의 테이블 설정은 Glue에 의해 내부적으로 자동으로 트리거됩니다.

![\[카탈로그 수준 통계 수집이 포함된 Hive 테이블의 이미지가 적용되고 통계가 수집되었습니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/auto-stats-summary.png)


# 카탈로그 수준 열 통계 생성 비활성화
<a name="disable-auto-column-stats-generation"></a>

 AWS Lake Formation 콘솔, `glue:UpdateCatalogSettings` API 또는 `glue:DeleteColumnStatisticsTaskSettings` API를 사용하여 새 테이블에 대한 자동 열 통계 생성을 비활성화할 수 있습니다.

**계정 수준에서 자동 열 통계 생성을 비활성화하려면**

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

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

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

1. **테이블 최적화 구성** 페이지에서 **카탈로그의 테이블에 대해 자동 통계 생성 활성화** 옵션을 선택 취소합니다.

1. **제출**을 선택합니다.

# 일정에 따라 열 통계 생성
<a name="generate-column-stats"></a>

다음 단계에 따라 AWS Glue 콘솔, AWS CLI 또는 [CreateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-CreateColumnStatisticsTaskSettings) 작업을 실행하여 AWS Glue Data Catalog에서 열 통계를 생성하는 일정을 구성합니다.

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

**콘솔을 사용하여 열 통계를 생성하는 방법**

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

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

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

1. **테이블** 페이지의 하단 섹션에서 **열 통계** 탭을 선택하세요.

1. **작업**의 **열 통계**에서 **일정에 따라 생성**을 선택할 수도 있습니다.

1. **일정에 따라 통계 생성** 페이지에서 빈도 및 시작 시간을 선택하여 열 통계 태스크를 실행하는 반복 일정을 구성하세요. 빈도를 시간별, 일별, 주별로 선택하거나 cron 표현식을 정의하여 일정을 지정할 수 있습니다.

   cron 표현식은 일정 패턴을 나타내는 문자열로, \$1 \$1 \$1 <minute> <hour><day of month> <month> <day of week> <year>처럼 공백으로 구분된 6개 필드로 구성됩니다. 예를 들어 매일 자정에 태스크를 실행하는 경우 cron 표현식은 0 0 \$1 \$1 ? \$1입니다.

   자세한 내용은 [cron 표현식](https://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html#CronExpressions) 섹션을 참조하세요.  
![\[스크린샷은 열 통계를 생성하는 데 사용할 수 있는 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/generate-column-stats-schedule.png)

1. 그런 다음 열 옵션을 선택하여 통계를 생성하세요.
   + **모든 열** - 표의 모든 열에 대한 통계를 생성하려면 이 옵션을 선택합니다.
   + **선택한 열** - 특정 열에 대한 통계를 생성하려면 이 옵션을 선택합니다. 드롭다운 목록에서 를 선택합니다.

1. IAM 역할을 선택하거나 통계를 생성할 권한이 있는 기존 역할을 생성하세요. AWS Glue에서 이 역할을 수임하여 열 통계를 생성합니다.

   더 빠른 접근 방식은 AWS Glue 콘솔에서 자동으로 역할을 생성하는 것입니다. 생성하는 역할은 특히 열 통계 생성을 위한 것이며 `AWSGlueServiceRole` AWS 관리형 정책과 지정된 데이터 소스에 필요한 인라인 정책을 포함합니다.

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

1. (선택 사항) 다음으로 로그에 대해 저장 중 암호화를 활성화하는 보안 구성을 선택합니다.

1. (선택 사항) 테이블에서 특정 비율의 행만 표시하여 통계를 생성함으로써 샘플 크기를 선택할 수 있습니다. 기본값은 모든 행입니다. 위쪽 및 아래쪽 화살표를 사용하여 백분율 값을 늘리거나 줄입니다.

   정확한 통계를 계산하려면 표에 모든 행을 포함하는 것이 좋습니다. 대략적인 값이 허용되는 경우에만 샘플 행을 사용하여 열 통계를 생성하십시오.

1. **통계 생성**을 선택하여 열 통계 생성 태스크를 실행하세요.

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

다음 AWS CLI 예제를 사용하여 열 통계 생성 일정을 생성할 수 있습니다. database-name, table-name, role은 필수 파라미터이며 schedule, column-name-list, catalog-id, sample-size, security-configuration은 선택적 파라미터입니다.

```
aws glue create-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name table_name \ 
 --role 'arn:aws:iam::123456789012:role/stats-role' \ 
 --schedule 'cron(0 0-5 14 * * ?)' \ 
 --column-name-list 'col-1' \  
 --catalog-id '123456789012' \ 
 --sample-size '10.0 ' \
 --security-configuration 'test-security'
```

[StartColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRun) 작업을 호출하여 열 통계를 생성해도 됩니다.

------

# 열 통계 생성 일정 관리
<a name="manage-column-stats-schedule"></a>

AWS Glue에서 열 통계 생성에 대한 일정 업데이트, 시작, 중지, 삭제와 같은 일정 운영 작업을 관리할 수 있습니다. AWS Glue 콘솔, AWS CLI 또는 [AWS Glue 열 통계 API 작업](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html)을 사용하여 이러한 태스크를 수행할 수 있습니다.

**Topics**
+ [열 통계 생성 일정 업데이트](#update-column-stats-shedule)
+ [열 통계 생성 일정 중지](#stop-column-stats-schedule)
+ [열 통계 생성 일정 재개](#resume-column-stats-schedule)
+ [열 통계 생성 일정 삭제](#delete-column-stats-schedule)

## 열 통계 생성 일정 업데이트
<a name="update-column-stats-shedule"></a>

일정이 생성된 후 열 통계 생성 태스크를 트리거하도록 일정을 업데이트할 수 있습니다. AWS Glue 콘솔, AWS CLI를 사용하거나 [UpdateColumnStatisticsTaskSettings](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-UpdateColumnStatisticsTaskSettings) 작업을 실행하여 테이블의 일정을 업데이트할 수 있습니다. 일정 유형(온디맨드 또는 예약)과 같은 기존 일정 파라미터 및 기타 선택적 파라미터를 수정할 수 있습니다.

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

**열 통계 생성 태스크 설정을 업데이트하는 방법**

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

1. 테이블 목록에서 업데이트하려는 테이블을 선택하세요.

1. 테이블 세부 정보 페이지의 하단 섹션에서 **열 통계**를 선택하세요.

1. **작업**에서 **편집**을 선택하여 일정을 업데이트하세요.

1. 일정을 원하는 대로 변경하고 **저장**을 선택하세요.

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

 콘솔에서 AWS Glue의 통계 생성 기능을 사용하지 않는 경우 `update-column-statistics-task-settings` 명령을 사용하여 일정을 수동으로 업데이트할 수 있습니다. 다음 예에서는 AWS CLI를 이용하여 열 통계를 업데이트하는 방법을 보여 줍니다.

```
aws glue update-column-statistics-task-settings \ 
 --database-name 'database_name' \ 
 --table-name 'table_name' \ 
 --role arn:aws:iam::123456789012:role/stats_role \ 
 --schedule 'cron(0 0-5 16 * * ?)' \ 
 --column-name-list 'col-1' \
 --sample-size '20.0' \  
 --catalog-id '123456789012'\
 --security-configuration 'test-security'
```

------

## 열 통계 생성 일정 중지
<a name="stop-column-stats-schedule"></a>

 증분 통계가 더 이상 필요하지 않은 경우 예약된 생성을 중지하여 리소스와 비용을 절약할 수 있습니다. 일정을 일시 중지해도 이전에 생성된 통계에는 영향을 주지 않습니다. 사용자에게 편한 시간에 일정을 재개할 수 있습니다.

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

**열 통계 생성 태스크 일정을 중지하는 방법**

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

1. 열 통계가 있는 테이블을 선택합니다.

1. **테이블 세부정보** 페이지에서 **열 통계**를 선택합니다.

1. **작업**에서 **예약된 생성**, **일시 중지**를 선택하세요.

1. **일시 중지**를 선택하여 확인하세요.

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

AWS CLI를 사용하여 열 통계 태스크 실행 일정을 중지하려면 다음 명령을 사용할 수 있습니다.

```
aws glue stop-column-statistics-task-run-schedule \
 --database-name ''database_name' \
 --table-name 'table_name'
```

`database_name` 및 `table_name`을 열 통계 태스크 실행 일정을 중지하려는 데이터베이스 및 테이블의 실제 이름으로 바꾸세요.

------

## 열 통계 생성 일정 재개
<a name="resume-column-stats-schedule"></a>

 통계 생성 일정을 일시 중지한 경우 AWS Glue는 사용자에게 편한 시간에 일정을 재개할 수 있습니다. AWS Glue 콘솔, AWS CLI 또는 [StartColumnStatisticsTaskRunSchedule](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StartColumnStatisticsTaskRunSchedule) 작업을 사용하여 일정을 재개할 수 있습니다.

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

**열 통계 생성 일정을 재개하는 방법**

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

1. 열 통계가 있는 테이블을 선택합니다.

1. **테이블 세부정보** 페이지에서 **열 통계**를 선택합니다.

1. **작업**에서 **예약된 생성**을 선택하고 **재개**를 선택하세요.

1. **재개**를 선택하여 확인하세요.

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

`database_name` 및 `table_name`을 열 통계 태스크 실행 일정을 중지하려는 데이터베이스 및 테이블의 실제 이름으로 바꾸세요.

```
aws glue start-column-statistics-task-run-schedule \
 --database-name 'database_name' \
 --table-name 'table_name'
```

------

## 열 통계 생성 일정 삭제
<a name="delete-column-stats-schedule"></a>

 최적의 쿼리 성능을 위해 일반적으로 최신 통계를 유지하는 것이 좋지만 자동 생성 일정을 제거하는 것이 도움이 될 수 있는 특정 사용 사례가 있습니다.
+ 데이터가 비교적 정적으로 유지되는 경우 기존 열 통계는 장기간 정확하게 유지되므로 자주 업데이트할 필요성이 줄어듭니다. 일정을 삭제하면 변경되지 않은 데이터에 대한 통계 재생성과 관련된 불필요한 리소스 소비 및 오버헤드를 방지할 수 있습니다.
+ 통계 생성에 대한 수동 제어가 선호되는 경우 자동 일정을 삭제하면 관리자는 특정 간격으로 또는 중요한 데이터 변경 후 열 통계를 선택적으로 업데이트하여 유지 관리 전략 및 리소스 할당 요구 사항에 맞게 프로세스를 조정할 수 있습니다.

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

**열 통계 생성 일정을 삭제하는 방법**

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

1. 열 통계가 있는 테이블을 선택합니다.

1. **테이블 세부정보** 페이지에서 **열 통계**를 선택합니다.

1. **작업**에서 **예약된 생성**, **삭제**를 차례로 선택하세요.

1. **삭제**를 선택하여 확인하세요.

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

`database_name` 및 `table_name`을 열 통계 태스크 실행 일정을 중지하려는 데이터베이스 및 테이블의 실제 이름으로 바꾸세요.

[DeleteColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-DeleteColumnStatisticsTaskSettings) API 작업 또는 AWS CLI를 사용하여 열 통계 일정을 삭제할 수 있습니다. 다음 예제에서는 AWS Command Line Interface(AWS CLI)를 사용하여 열 통계 생성 일정을 삭제하는 방법을 보여줍니다.

```
aws glue delete-column-statistics-task-settings \
    --database-name 'database_name' \
    --table-name 'table_name'
```

------

# 온디맨드로 열 통계 생성
<a name="column-stats-on-demand"></a>

설정된 일정 없이 온디맨드로 AWS Glue Data Catalog 테이블 태스크에 대한 열 통계 태스크를 실행할 수 있습니다. 이 옵션은 임시 분석이나 통계를 즉시 계산해야 하는 경우에 유용합니다.

다음 단계에 따라 AWS Glue 콘솔 또는 AWS CLI를 사용하여 Data Catalog 테이블에서 온디맨드로 열 통계를 생성합니다.

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

**콘솔을 사용하여 열 통계를 생성하는 방법**

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

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

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

1. **작업** 메뉴에서 **통계 생성**을 선택합니다.

   또한 **테이블** 페이지 하단 섹션의 **열 통계** 탭에서 **생성**, **온디맨드로 생성** 옵션을 선택할 수도 있습니다.

1. [일정에 따라 열 통계 생성](generate-column-stats.md)의 7\$111단계를 따라 테이블에 대한 열 통계를 생성합하세요.

1. **통계 생성** 페이지에서 다음 옵션을 지정합니다.  
![\[스크린샷은 열 통계를 생성하는 데 사용할 수 있는 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/generate-column-stats.png)
   + **모든 열** - 표의 모든 열에 대한 통계를 생성하려면 이 옵션을 선택합니다.
   + **선택한 열** - 특정 열에 대한 통계를 생성하려면 이 옵션을 선택합니다. 드롭다운 목록에서 를 선택합니다.
   + **IAM 역할** - 열 통계 생성 태스크를 실행하는 데 필요한 권한 정책이 있는 **새 IAM 역할 생성**을 선택합니다. 권한 세부 정보 보기를 선택하여 정책 설명을 검토합니다. 목록에서 IAM 역할을 선택할 수도 있습니다. 필요한 권한에 대한 자세한 정보는 [열 통계 생성을 위한 사전 요구 사항](column-stats-prereqs.md) 단원을 참조하세요.

     통계를 생성하기 위해 지정한 역할의 AWS Glue 권한을 수임합니다.

     AWS Glue의 역할을 제공하는 데 대한 자세한 내용은 [AWS Glue에 대한 ID 기반 정책](https://docs.aws.amazon.com/glue/latest/dg/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies)을 참조하세요.
   + (선택 사항) 다음으로 로그에 대해 저장 중 암호화를 활성화하는 보안 구성을 선택합니다.
   + **샘플 행** - 테이블에서 특정 비율의 행만 선택하여 통계를 생성합니다. 기본값은 모든 행입니다. 위쪽 및 아래쪽 화살표를 사용하여 백분율 값을 늘리거나 줄입니다.
**참고**  
정확한 통계를 계산하려면 표에 모든 행을 포함하는 것이 좋습니다. 대략적인 값이 허용되는 경우에만 샘플 행을 사용하여 열 통계를 생성하십시오.

   **통계 생성**을 선택하여 작업을 실행합니다.

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

이 명령은 지정된 테이블에 대한 열 통계 태스크 실행을 트리거합니다. 데이터베이스 이름, 테이블 이름, 통계를 생성할 권한이 있는 IAM 역할을 제공하고 선택적으로 통계 계산을 위한 열 이름 및 샘플 크기 백분율을 제공해야 합니다.

```
aws glue start-column-statistics-task-run \ 
    --database-name 'database_name \ 
    --table-name 'table_name' \ 
    --role 'arn:aws:iam::123456789012:role/stats-role' \
    --column-name 'col1','col2'  \
    --sample-size 10.0
```

이 명령은 지정된 테이블에 대한 열 통계를 생성하는 태스크를 시작합니다.

------

## 온디맨드로 열 통계 업데이트
<a name="update-column-stats-on-demand"></a>

 쿼리 옵티마이저가 효율적인 실행 계획을 생성하려면 최신 열 통계를 유지하는 것이 중요합니다. 이를 통해 쿼리 성능을 개선하고 리소스 소비를 줄이며 전체 시스템 성능을 개선할 수 있습니다. 이 프로세스는 대량 로드 또는 광범위한 수정과 같은 중요한 데이터 변경 후에 기존 통계가 더 이상 사용되지 않을 수 있으므로 특히 중요합니다.

열 통계를 새로 고치려면 AWS Glue 콘솔에서 **통계 생성** 작업을 명시적으로 실행해야 합니다. 데이터 카탈로그는 통계를 자동으로 새로 고치지 않습니다.

콘솔에서 AWS Glue의 통계 생성 기능을 사용하지 않는 경우 [UpdateColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_UpdateColumnStatisticsForTable.html) API 작업 또는 AWS CLI를 사용하여 열 통계를 수동으로 업데이트할 수 있습니다. 다음 예에서는 AWS CLI를 이용하여 열 통계를 업데이트하는 방법을 보여 줍니다.

```
aws glue update-column-statistics-for-table --cli-input-json:

{
    "CatalogId": "111122223333",
    "DatabaseName": "database_name",
    "TableName": "table_name",
    "ColumnStatisticsList": [
        {
            "ColumnName": "col1",
            "ColumnType": "Boolean",
            "AnalyzedTime": "1970-01-01T00:00:00",
            "StatisticsData": {
                "Type": "BOOLEAN",
                "BooleanColumnStatisticsData": {
                    "NumberOfTrues": 5,
                    "NumberOfFalses": 5,
                    "NumberOfNulls": 0
                }
            }
        }
    ]
}
```

# 열 통계 보기
<a name="view-column-stats"></a>

통계를 성공적으로 생성한 후 Data Catalog는 비용 기반 최적화 프로그램이 쿼리를 실행할 때 최적의 선택을 할 수 있도록 Amazon Athena과 Amazon Redshift에 이 정보를 저장합니다. 통계는 열의 유형에 따라 달라집니다.

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

**테이블의 열 통계를 보는 방법**
+ 열 통계 작업을 실행한 후 **테이블 세부정보** 페이지의 **열 통계** 탭에 테이블의 통계가 표시됩니다.  
![\[스크린샷은 가장 최근 실행에서 생성된 열을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/view-column-stats.png)

  다음과 같은 통계를 사용할 수 있습니다.
  + 열 이름: 통계 생성에 사용되는 열 이름
  + 최종 업데이트: 통계가 생성된 날짜 및 시각
  + 평균 길이: 열에 있는 값의 평균 길이
  + 고유 값: 열의 고유 값 총 수입니다. 상대 오차가 5% 인 열의 고유 값 수를 추정합니다.
  + 최대값: 열에서 최고 값입니다.
  + 최소값: 열에서 최저 값입니다.
  + 최대 길이: 열에서 최고 값의 길이입니다.
  + 열의 null 값의 수입니다.
  + 열의 true 값의 수입니다.
  + 열의 false 값의 수입니다.
  + numFiles: 테이블에 있는 총 파일 수. 이 값은 **고급 속성** 탭에 제공됩니다.

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

다음 예제에서는 AWS CLI를 사용하여 열 통계를 검색하는 방법을 보여줍니다.

```
aws glue get-column-statistics-for-table \
    --database-name database_name \
    --table-name table_name \
    --column-names <column_name>
```

 또한 [GetColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetColumnStatisticsForTable.html) API 작업을 사용하여 열 통계를 볼 수 있습니다.

------

# 컬럼 통계 태스크 실행 보기
<a name="view-stats-run"></a>

열 통계 작업을 실행한 후 AWS Glue 콘솔, AWS CLI 또는 [GetColumnStatisticsTaskRuns](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-GetColumnStatisticsTaskRun) 작업을 사용하여 테이블에 대한 작업 실행 세부 정보를 탐색할 수 있습니다.

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

**열 통계 작업 실행 세부 정보를 보는 방법**

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

1. 열 통계가 있는 테이블을 선택합니다.

1. **테이블 세부정보** 페이지에서 **열 통계**를 선택합니다.

1. **실행 보기**를 선택합니다.

   지정된 테이블과 관련된 모든 실행에 대한 정보를 볼 수 있습니다.  
![\[스크린샷은 열 통계를 생성하는 데 사용할 수 있는 옵션을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/view-column-stats-task-runs.png)

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

다음 예제에서는 `DatabaseName` 및 `TableName`의 값을 실제 데이터베이스 및 테이블 이름으로 바꿉니다.

```
aws glue get-column-statistics-task-runs --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# 열 통계 작업 실행 중지
<a name="stop-stats-run"></a>

AWS Glue콘솔을 AWS CLI 사용하거나 [StopColumnStatisticsTaskRun](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-column-statistics.html#aws-glue-api-crawler-column-statistics-StopColumnStatisticsTaskRun) 작업을 사용하여 테이블에 대한 열 통계 작업 실행을 중지할 수 있습니다.

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

**열 통계 작업을 중지하려면 작업을 실행하십시오**

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

1. 열 통계 작업 실행이 진행 중인 테이블을 선택합니다.

1. **테이블 세부정보** 페이지에서 **열 통계**를 선택합니다.

1. **중지**를 선택합니다.

   실행이 완료되기 전에 작업을 중지하면 테이블에 대한 열 통계가 생성되지 않습니다.

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

다음 예제에서는 `DatabaseName` 및 `TableName`의 값을 실제 데이터베이스 및 테이블 이름으로 바꿉니다.

```
aws glue stop-column-statistics-task-run --input-cli-json file://input.json
{
    "DatabaseName": "database_name",
    "TableName": "table_name"
}
```

------

# 컬럼 통계 삭제
<a name="delete-column-stats"></a>

[DeleteColumnStatisticsForTable](https://docs.aws.amazon.com/glue/latest/webapi/API_DeleteColumnStatisticsForTable.html) API 작업 또는 AWS CLI를 사용하여 열 통계를 삭제할 수 있습니다. 다음 예제에서는 AWS Command Line Interface(AWS CLI)을 사용하여 열 통계를 삭제하는 방법을 보여줍니다.

```
aws glue delete-column-statistics-for-table \
    --database-name 'database_name' \
    --table-name 'table_name' \
    --column-name 'column_name'
```

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

열 통계 생성에는 다음 고려 사항 및 제한 사항이 적용됩니다.

**고려 사항**
+ 샘플링을 사용하여 통계를 생성하면 실행 시간이 줄어들지만 통계가 정확하지 않을 수도 있습니다.
+ 데이터 카탈로그에는 통계의 서로 다른 버전이 저장되지 않습니다.
+ 테이블당 한 번에 하나의 통계 생성 작업만 실행할 수 있습니다.
+ Data Catalog에 등록된 고객 AWS KMS 키를 사용하여 테이블을 암호화하는 경우 AWS Glue는 동일한 키를 사용하여 통계를 암호화합니다.

**열 통계 작업은 통계 생성을 지원합니다.**
+ IAM 역할에 전체 테이블 권한(IAM 또는 Lake Formation)이 있는 경우.
+ IAM 역할에 Lake Formation 하이브리드 액세스 모드를 사용하는 테이블에 대한 권한이 있는 경우.

**열 통계 작업은 다음에 대한 통계 생성을 지원하지 않습니다.**
+ Lake Formation 셀 기반 액세스 제어 기능이 있는 테이블.
+ 트랜잭션 데이터 레이크 - Linux foundation Delta Lake, Apache Hudi
+ 페더레이션된 데이터베이스의 테이블 - Hive 메타스토어, Amazon Redshift 데이터 공유
+ 중첩된 열, 배열, 구조체 데이터 유형.
+ 다른 계정에서 공유한 테이블