ALTER TABLE ADD PARTITION - Amazon Athena

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 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백만 개 이상의 파티션을 읽을 수는 없습니다.

  • 쿼리를 최적화하고 스캔되는 파티션 수를 줄이려면 파티션 정리 또는 파티션 인덱스 사용과 같은 전략을 고려해 보세요.

  • 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에 partition_value_$folder$ 형식의 0바이트 자리 표시자 파일이 생성됩니다. 이러한 파일은 수동으로 제거해야 합니다.

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

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]