ALTER TABLE ADD PARTITION
테이블에 대해 하나 이상의 파티션 열을 만듭니다. 각 파티션은 하나 이상의 개별 열 이름/값 조합으로 구성됩니다. 지정된 각각의 조합에 별개의 데이터 디렉터리가 생성되어 상황에 따라 쿼리 성능을 개선할 수 있습니다. 분할된 열은 테이블 데이터 자체 내에 존재하지 않으므로 테이블 자체의 열과 이름이 같은 열 이름을 사용하면 오류가 발생합니다. 자세한 내용은 Athena에서 데이터 분할 단원을 참조하십시오.
Athena에서 테이블과 그 파티션은 동일한 데이터 형식을 사용해야 하지만 스키마는 다를 수 있습니다. 자세한 내용은 파티션이 있는 테이블의 업데이트 단원을 참조하세요.
IAM 정책에 필요한 리소스 수준 권한(glue:CreatePartition
등)에 대한 자세한 내용은 AWS Glue API 권한: 작업 및 리소스 참조 및 AWS Glue Data Catalog의 데이터베이스와 테이블에 대한 세분화된 액세스 섹션을 참조하세요. Athena 사용 시의 권한에 대한 문제 해결 정보는 권한 주제의 Athena의 문제 해결 섹션을 참조하세요.
시놉시스
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']
[,...]
파라미터
파티션을 추가할 때 파티션에 대해 하나 이상의 열 이름/값 페어와 해당 파티션의 데이터 파일이 있는 Amazon S3 경로를 지정합니다.
- [IF NOT EXISTS]
-
동일한 정의의 파티션이 이미 있으면 오류가 억제되도록 합니다.
- PARTITION (partition_col_name = partition_col_value [,...])
-
지정한 열 이름/값 조합으로 파티션을 생성합니다. 열의 데이터 형식이 문자열인 경우에만
partition_col_value
를 문자열 문자로 묶습니다. - [LOCATION 'location']
-
위의 명령문에서 정의한 파티션을 저장할 디렉터리를 지정합니다. 데이터가 Hive 스타일 파티셔닝(
pk1=v1/pk2=v2/pk3=v3
)을 사용하는 경우LOCATION
절은 선택 사항입니다. Hive 스타일 파티셔닝을 사용하면 전체 Amazon S3 URI가 테이블 위치, 파티션 키 이름 및 파티션 키 값을 기반으로 자동으로 구성됩니다. 자세한 내용은 Athena에서 데이터 분할 단원을 참조하십시오.
고려 사항
Amazon Athena는 단일 ALTER TABLE ADD PARTITION
DDL 문에 추가할 수 있는 파티션 수에 제한을 두지 않습니다. 하지만 상당한 수의 파티션을 추가해야 하는 경우 잠재적인 성능 문제를 방지하기 위해 작업을 더 작은 배치로 나누는 것을 고려해야 합니다. 다음 예제에서는 연속 명령을 사용하여 파티션을 개별적으로 추가하고 중복된 파티션을 추가하지 않도록 IF NOT EXISTS
를 사용합니다.
ALTER TABLE
table_name
ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLEtable_name
ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLEtable_name
ADD IF NOT EXISTS PARTITION (ds='2023-01-03')
Athena에서 파티션을 사용할 때 다음 사항에 유의하세요.
-
Athena는 1천만 개의 파티션이 있는 AWS Glue 테이블에 대한 쿼리를 지원하지만, 단일 스캔으로 1백만 개 이상의 파티션을 읽을 수는 없습니다.
-
쿼리를 최적화하고 스캔되는 파티션 수를 줄이려면 파티션 정리 또는 파티션 인덱스 사용과 같은 전략을 고려해 보세요.
-
AWS Glue Data Catalog를 사용하지 않는 경우 테이블당 최대 파티션 수는 20,000개입니다. 할당량 증가를 요청할 수 있습니다.
Athena에서의 파티션 사용에 대한 추가 고려 사항은 Athena에서 데이터 분할 섹션을 참조하세요.
예제
다음 예제는 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://mystorage/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://mystorage/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$
파일
ALTER TABLE ADD PARTITION
문을 실행할 때 이미 존재하는 파티션과 잘못된 Amazon S3 위치를 지정하는 경우 Amazon S3에
형식의 0바이트 자리 표시자 파일이 생성됩니다. 이러한 파일은 수동으로 제거해야 합니다.partition_value
_$folder$
이 오류가 발생하지 않도록 하려면 다음 예제와 같이 ALTER TABLE ADD PARTITION
문에서 ADD IF NOT EXISTS
구문을 사용합니다.
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]