

# ALTER TABLE ADD PARTITION
<a name="alter-table-add-partition"></a>

테이블에 대해 하나 이상의 파티션 열을 만듭니다. 각 파티션은 하나 이상의 개별 열 이름/값 조합으로 구성됩니다. 지정된 각각의 조합에 별개의 데이터 디렉터리가 생성되어 상황에 따라 쿼리 성능을 개선할 수 있습니다. 분할된 열은 테이블 데이터 자체 내에 존재하지 않으므로 테이블 자체의 열과 이름이 같은 열 이름을 사용하면 오류가 발생합니다. 자세한 내용은 [데이터 파티셔닝](partitions.md) 섹션을 참조하세요.

Athena에서 테이블과 그 파티션은 동일한 데이터 형식을 사용해야 하지만 스키마는 다를 수 있습니다. 자세한 내용은 [파티션이 있는 테이블의 업데이트](updates-and-partitions.md) 단원을 참조하세요.

IAM 정책에 필요한 리소스 수준 권한(`glue:CreatePartition` 등)에 대한 자세한 내용은 [AWS Glue API 권한: 작업 및 리소스 참조](https://docs.aws.amazon.com/glue/latest/dg/api-permissions-reference.html) 및 [AWS Glue Data Catalog의 데이터베이스 및 테이블에 대한 액세스 구성](fine-grained-access-to-glue-resources.md) 섹션을 참조하세요. Athena 사용 시의 권한에 대한 문제 해결 정보는 [권한](troubleshooting-athena.md#troubleshooting-athena-permissions) 주제의 [Athena의 문제 해결](troubleshooting-athena.md) 섹션을 참조하세요.

## 시놉시스
<a name="synopsis"></a>

```
ALTER TABLE table_name ADD [IF NOT EXISTS]
  PARTITION
  (partition_col1_name = partition_col1_value
  [,partition_col2_name = partition_col2_value]
  [,...])
  [LOCATION 'location1']
  [PARTITION
  (partition_colA_name = partition_colA_value
  [,partition_colB_name = partition_colB_value
  [,...])]
  [LOCATION 'location2']
  [,...]
```

## 파라미터
<a name="parameters"></a>

파티션을 추가할 때 파티션에 대해 하나 이상의 열 이름/값 페어와 해당 파티션의 데이터 파일이 있는 Amazon S3 경로를 지정합니다.

**[IF NOT EXISTS]**  
동일한 정의의 파티션이 이미 있으면 오류가 억제되도록 합니다.

**PARTITION (partition\$1col\$1name = partition\$1col\$1value [,...])**  
지정한 열 이름/값 조합으로 파티션을 생성합니다. 열의 데이터 형식이 문자열인 경우에만 `partition_col_value`를 문자열 문자로 묶습니다.

**[LOCATION 'location']**  
위의 명령문에서 정의한 파티션을 저장할 디렉터리를 지정합니다. 데이터가 Hive 스타일 파티셔닝(`pk1=v1/pk2=v2/pk3=v3`)을 사용하는 경우 `LOCATION` 절은 선택 사항입니다. Hive 스타일 파티셔닝을 사용하면 전체 Amazon S3 URI가 테이블 위치, 파티션 키 이름 및 파티션 키 값을 기반으로 자동으로 구성됩니다. 자세한 내용은 [데이터 파티셔닝](partitions.md) 섹션을 참조하세요.

## 고려 사항
<a name="alter-table-add-partition-considerations"></a>

Amazon Athena는 단일 `ALTER TABLE ADD PARTITION` DDL 문에 추가할 수 있는 파티션 수에 제한을 두지 않습니다. 하지만 상당한 수의 파티션을 추가해야 하는 경우 잠재적인 성능 문제를 방지하기 위해 작업을 더 작은 배치로 나누는 것을 고려해야 합니다. 다음 예제에서는 연속 명령을 사용하여 파티션을 개별적으로 추가하고 중복된 파티션을 추가하지 않도록 `IF NOT EXISTS`를 사용합니다.

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02')
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')
```

 Athena에서 파티션을 사용할 때 다음 사항에 유의하세요.
+ Athena는 1천만 개의 파티션이 있는 AWS Glue 테이블에 대한 쿼리를 지원하지만, 단일 스캔으로 1백만 개 이상의 파티션을 읽을 수는 없습니다.
+ 쿼리를 최적화하고 스캔되는 파티션 수를 줄이려면 파티션 정리 또는 파티션 인덱스 사용과 같은 전략을 고려해 보세요.

Athena에서의 파티션 사용에 대한 추가 고려 사항은 [데이터 파티셔닝](partitions.md) 섹션을 참조하세요.

## 예제
<a name="examples"></a>

다음 예제는 Hive 스타일로 파티셔닝된 데이터의 테이블에 단일 파티션을 추가합니다.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-14', country = 'IN');
```

다음 예제는 Hive 스타일로 파티셔닝된 데이터의 테이블에 다중 파티션을 추가합니다.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN')
  PARTITION (dt = '2016-06-01', country = 'IN');
```

테이블이 Hive 스타일로 파티셔닝된 데이터를 지원하지 않는 경우 `LOCATION` 절은 필수이며, 파티션의 데이터를 포함하는 접두사에 대해 전체 Amazon S3 URI여야 합니다.

```
ALTER TABLE orders ADD
  PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/'
  PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';
```

파티션이 이미 존재하는 경우 오류를 무시하려면 다음 예제와 같이 `IF NOT EXISTS` 절을 사용합니다.

```
ALTER TABLE orders ADD IF NOT EXISTS
  PARTITION (dt = '2016-05-14', country = 'IN');
```

## 0바이트 `_$folder$` 파일
<a name="alter-table-add-partition-zero-byte-folder-files"></a>

`ALTER TABLE ADD PARTITION` 문을 실행할 때 이미 존재하는 파티션과 잘못된 Amazon S3 위치를 지정하는 경우 Amazon S3에 `partition_value_$folder$` 형식의 0바이트 자리 표시자 파일이 생성됩니다. 이러한 파일은 수동으로 제거해야 합니다.

이 오류가 발생하지 않도록 하려면 다음 예제와 같이 `ALTER TABLE ADD PARTITION` 문에서 `ADD IF NOT EXISTS` 구문을 사용합니다.

```
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]
```