MSCK REPAIR TABLE - Amazon Athena

MSCK REPAIR TABLE

Hive 호환 파티션을 추가한 후 MSCK REPAIR TABLE 명령을 사용하여 카탈로그의 메타데이터를 업데이트합니다.

MSCK REPAIR TABLE 명령은 테이블을 생성한 후 파일 시스템에 추가된 Hive 호환 파티션을 위해 Amazon S3 등의 파일 시스템을 스캔합니다. MSCK REPAIR TABLE은 테이블 메타데이터의 파티션과 S3의 파티션을 비교합니다. 테이블을 생성할 때 지정한 S3 위치에 새 파티션이 있으면 메타데이터와 Athena 테이블에 해당 파티션이 추가됩니다.

물리적 파티션을 추가하면 카탈로그의 메타데이터가 파일 시스템의 데이터 레이아웃과 일치하지 않게 되므로 새 파티션에 대한 정보를 카탈로그에 추가해야 합니다. 메타데이터를 업데이트하려면 Athena에서 새 파티션의 데이터를 쿼리할 수 있도록 MSCK REPAIR TABLE을 실행합니다.

참고

MSCK REPAIR TABLE은 메타데이터에 파티션을 추가하기만 합니다. 파티션을 제거하지는 않습니다. Amazon S3에서 파티션을 수동으로 삭제한 후 메타데이터에서 파티션을 제거하려면 ALTER TABLE table-name DROP PARTITION 명령을 실행합니다. 자세한 내용은 ALTER TABLE DROP PARTITION 단원을 참조하세요.

고려 사항 및 제한

MSCK REPAIR TABLE을 사용할 때는 다음 사항에 유의하세요.

  • 모든 파티션을 추가하려면 다소 시간이 걸릴 수 있습니다. 이 작업의 시간이 초과되면 카탈로그에 몇 개의 파티션만 추가되는 불완전한 상태가 됩니다. 모든 파티션이 추가될 때까지 동일한 테이블에서 MSCK REPAIR TABLE을 실행해야 합니다. 자세한 정보는 Athena에서 데이터 분할을 참조하십시오.

  • Hive와 호환되지 않는 파티션의 경우 데이터를 쿼리할 수 있도록 파티션을 로드하려면 ALTER TABLE ADD PARTITION을 사용합니다.

  • Athena에 사용될 파티션 위치는 s3 프로토콜(예: s3://bucket/folder/)을 사용해야 합니다. Athena에서, 다른 프로토콜(예: s3a://bucket/folder/)을 사용하는 위치는 포함 테이블에서 MSCK REPAIR TABLE 쿼리를 실행할 때 쿼리 실패를 초래하게 됩니다.

  • MSCK REPAIR TABLE은 일치하는 파티션 스키마를 찾기 위해 폴더와 하위 폴더를 모두 스캔하기 때문에 별도의 폴더 계층 구조에 있는 별도의 테이블에 데이터를 보관해야 합니다. 예를 들어 테이블 A의 데이터를 s3://table-a-data에 두고 테이블 B에 대한 데이터을 s3://table-a-data/table-b-data에 두었다고 가정합시다. 두 테이블이 모두 문자열로 분할된 경우 MSCK REPAIR TABLE은 테이블 B의 파티션을 테이블 A에 추가합니다. 이를 방지하려면 s3://table-a-datas3://table-b-data와 같은 별도의 폴더 구조를 대신 사용해야 합니다. 이 동작은 Amazon EMR과 Apache Hive에서도 동일합니다.

시놉시스

MSCK REPAIR TABLE table_name

예제

MSCK REPAIR TABLE orders;

문제 해결

MSCK REPAIR TABLE을 실행한 후 Athena가 AWS Glue Data Catalog의 테이블에 파티션을 추가하지 않으면 다음을 확인하세요.

  • AWS Identity and Access Management(IAM) 사용자 또는 역할에 glue:BatchCreatePartition 작업을 허용하는 정책이 있는지 확인합니다.

  • IAM 사용자 또는 역할에 Amazon S3 액세스할 수 있는 권한(s3:DescribeJob 작업 포함)이 있는 정책이 있는지 확인합니다. 허용할 Amazon S3 작업에 대한 예는 Amazon S3 버킷에 대한 Athena의 계정 간 액세스의 버킷 정책 예시를 참조하세요.

  • Amazon S3 경로가 camel 표기 대신 소문자인지 확인합니다(예: userId 대신 userid).

  • 쿼리 시간 제한MSCK REPAIR TABLE은 처음으로 테이블을 만들거나 데이터와 파티션 메타 데이터 간의 패리티에 대한 불확실성이 있을 때 가장 적합합니다. MSCK REPAIR TABLE을 사용해 새 파티션을 자주 추가하는데(예: 날마다) 쿼리 시간 제한이 발생하는 경우 ALTER TABLE ADD PARTITION 사용을 고려하는 것이 좋습니다.

  • 파일 시스템에서 파티션 누락 - Amazon S3에서 파티션을 수동으로 삭제한 다음 MSCK REPAIR TABLE을 실행하면 파일 시스템에서 파티션이 누락되었습니다 오류 메시지가 나타날 수 있습니다. 이는 MSCK REPAIR TABLE이 기한 경과된 파티션을 테이블 메타데이터를 제거하지 않았기 때문입니다. 테이블 메타데이터에서 삭제된 파티션을 제거하려면 ALTER TABLE DROP PARTITION을 대신 실행합니다. SHOW PARTITIONS는 비슷하게 파티션을 나열하지만 파일 시스템의 파티션을 제외하고 메타데이터의 파티션만 나열합니다.

  • "NullPointerException name is null" 오류

    TableType 속성을 지정하지 않고 AWS Glue CreateTable API 작업 또는 AWS CloudFormation AWS::Glue::Table 템플릿을 사용하여 Athena에서 사용할 테이블을 만든 다음 SHOW CREATE TABLE 또는 MSCK REPAIR TABLE 같은 DDL 쿼리를 실행하면, 실패: NullPointerException Name이 null임(FAILED: NullPointerException Name is null)이라는 오류 메시지가 표시될 수 있습니다.

    이 오류를 해결하려면 AWS Glue CreateTable API 호출 또는 AWS CloudFormation 템플릿의 일부로 TableInput TableType 속성의 값을 지정하세요. TableType의 가능한 값은 EXTERNAL_TABLE 또는 VIRTUAL_VIEW입니다.

    이 요구 사항은 AWS Glue CreateTable API 작업 또는 AWS::Glue::Table 템플릿을 사용하여 테이블을 만들 때만 적용됩니다. DDL 문이나 AWS Glue 크롤러를 사용하여 Athena용 테이블을 생성할 경우 TableType 속성이 자동으로 정의됩니다.

다음 섹션에서 여러 세부 정보를 추가로 제공합니다.

IAM 정책에서 glue:BatchCreatePartition 허용

MSCK REPAIR TABLE 실행을 위해 사용 중인 사용자 또는 역할에 연결된 IAM 정책을 검토합니다. Athena와 함께 AWS Glue Data Catalog를 사용하는 경우 IAM 정책에서 glue:BatchCreatePartition 작업을 허용해야 합니다. glue:BatchCreatePartition 작업을 허용하는 IAM 정책의 예는 AWS 관리형 정책: AmazonAthenaFullAccess 단원을 참조하세요.

Amazon S3 경로를 소문자로 변경

Amazon S3 경로는 소문자여야 합니다. S3 경로가 camel 표기인 경우 MSCK REPAIR TABLE은 AWS Glue Data Catalog에 파티션을 추가하지 않습니다. 예를 들어 S3 경로가 userId인 경우 다음 파티션은 AWS Glue Data Catalog에 추가되지 않습니다.

s3://bucket/path/userId=1/ s3://bucket/path/userId=2/ s3://bucket/path/userId=3/

이 문제를 해결하려면 낙타 대문자 대신에 단순형 대문자를 사용하세요.

s3://bucket/path/userid=1/ s3://bucket/path/userid=2/ s3://bucket/path/userid=3/