Amazon Athena에서 테이블을 쿼리할 때 “HIVE_METASTORE_ERROR” 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Athena 테이블을 쿼리할 때 “HIVE_METASTORE_ERROR” 오류가 발생합니다.

간략한 설명

다음과 같은 유형의 “HIVE\ _METASTORE\ _ERROR” 오류와 그 원인을 확인하세요.

  • 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): 쿼리된 테이블의 열 이름에 특수 문자가 포함되거나 파티션 스키마의 열 이름에 특수 문자가 포함됩니다. 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 메타스토어에 대해 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(S3) Hive 파티션 형식으로 로드된 경우, 해당 파티션을 로드하세요. 다음 예시와 비슷한 명령을 실행합니다.
    참고: doc_example_table을 귀하의 테이블 이름으로 바꾸어야 합니다.
MSCK REPAIR TABLE doc_example_table
  • MSCK REPAIR 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에서의 문제 해결

AWS 공식
AWS 공식업데이트됨 일 년 전