Amazon Athena 테이블을 쿼리할 때 “HIVE_METASTORE_ERROR” 오류가 발생합니다.
간략한 설명
다른 유형의 “HIVE_METASTORE_ERROR” 오류와 그 원인은 다음과 같습니다.
- **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct
but '/' is found. (Service: null; Status Code: 0; Error Code: null; Request ID: null):** 쿼리된 테이블의 열 이름에 특수 문자가 포함되어 있거나, 파티션 스키마의 열 이름에 특수 문자가 포함된 경우 이 오류가 발생합니다. Athena는 밑줄 이외의 특수 문자를 지원하지 않습니다. 자세한 내용은 테이블, 데이터베이스 및 열의 이름을 참조하세요.
- HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated:
StorageDescriptor 파라미터가 테이블의 물리적 스토리지에 대한 정보를 포함합니다. 파티션이 손상되어 테이블에 있는 하나 이상의 파티션에서 파티션 위치가 설정되어 있지 않은 경우, 이 오류가 발생합니다.
- HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes): AWS Lambda 함수를 사용하여 교차 계정 AWS Glue 데이터 카탈로그 또는 외부 Hive Metastore에 대해 Athena 쿼리를 실행할 때 이 오류가 발생합니다. Lambda의 호출 페이로드 제한은 6MB입니다. Lambda에서 반환된 객체의 크기가 6MB를 초과할 때 이 오류가 발생합니다. Lambda 페이로드 제한은 하드 제한이며 늘릴 수 없습니다. 자세한 내용은 Lambda 할당량을 참조하세요.
해결 방법
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found. (Service: null; Status Code: 0; Error Code: null; Request ID: null)
이 오류를 해결하려면 다음을 수행하세요.
- 데이터에서 다음 사용자 지정 스크립트를 실행하여 열 이름의 특수 문자를 밑줄로 바꿉니다.
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated
이 오류를 해결하려면 다음 솔루션 중 하나 이상을 선택합니다.
- 테이블이 이미 분할되어 있고 데이터가 Amazon Simple Storage Service(Amazon S3) Hive 파티션 형식으로 로드된 경우 다음과 유사한 명령을 실행하여 파티션을 로드합니다.
참고: doc_example_table을 테이블 이름으로 바꿔야 합니다.
MSCK REPAIR TABLE doc_example_table
- MCSK REPARY TABLE 명령을 실행해도 문제가 해결되지 않으면, 테이블을 삭제하고 동일한 정의로 새 테이블을 만듭니다. 그런 다음, 새 테이블에서 MSCK REPAIR TABLE 명령을 실행합니다.
- Amazon S3 버킷에 별도의 폴더를 생성한 다음 쿼리할 데이터 파일을 해당 폴더로 이동합니다. 그런 다음 버킷 대신 해당 폴더를 가리키는 AWS Glue 크롤러를 만듭니다.
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes)
이 오류를 해결하려면 다음 솔루션 중 하나 이상을 선택합니다.
- Lambda 함수의 응답 페이로드를 객체로 Amazon S3 버킷에 업로드합니다. 그런 다음 이 객체를 Lambda 함수 응답에 페이로드로 포함합니다. 객체에 대해 미리 서명된 URL 생성에 대한 자세한 내용은 미리 서명된 URL과 객체 공유를 참조하세요.
- 테이블이 분할되고 사용 사례가 허용하는 경우 특정 파티션만 쿼리합니다.
- Lambda 함수를 생성할 때 Amazon S3에서 유출 위치를 지정합니다. 임계값보다 큰 응답은 지정된 S3 위치로 유출됩니다.
관련 정보
Athena의 문제 해결