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

4분 분량
0

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

해결 방법

원인과 해결 방법은 다음 유형의 “HIVE_METASTORE_ERROR” 오류를 참조하세요.

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

"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)"

-또는-

"HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Error: : expected at the position 11884 of ... but '#' is found"

쿼리된 테이블의 열 이름에 특수 문자가 포함되거나 파티션 스키마의 열 이름에 특수 문자가 포함됩니다. Athena는 밑줄 이외의 특수 문자를 지원하지 않습니다. 자세한 내용은 테이블, 데이터베이스 및 열 이름을 참조하세요.

이 오류를 해결하려면 열 이름의 특수 문자를 밑줄로 바꿔야 합니다. 그런 다음 테이블의 기존 스키마를 편집합니다.

다음 예제 AWS Glue 테이블에는 특수 문자 "/"가 있는 "a.txt"라는 데이터 파일이 포함되어 있습니다.

col/1,col_2,col/3
data1,data2,data3
data4,data5,data6
  1. 특수 문자 "/"를 밑줄 "_"로 바꾸려면 다음 스크립트를 실행합니다.

    string = open('a.txt').readlines()
    string[0] = string[0].replace('/', '_')
    open('b.txt', 'w').write(string)

    새 데이터 파일 "b.txt“를 사용한 예제 출력:

    col_1,col_2,col_3
    data1,data2,data3
    data4,data5,data6
  2. AWS Glue 콘솔 테이블의 기존 스키마를 편집한 다음, '/'를 Athena에서 지원하는 다른 문자로 바꿉니다.

"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated"

-또는-

"HIVE_METASTORE_ERROR: Table is missing storage descriptor"

StorageDescriptor 파라미터에 이 테이블의 물리적 스토리지에 대한 정보가 들어 있습니다. 손상된 파티션으로 인해 테이블에 있는 하나 이상의 파티션에 파티션 위치가 설정되지 않은 경우 이 오류가 발생합니다.

이 오류를 해결하려면 다음 솔루션 중 하나 이상을 선택하세요.

  • 테이블이 이미 분할되어 있고, 데이터가 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)"

AWS Lambda 함수를 사용하여 교차 계정 AWS Glue 데이터 카탈로그 또는 외부 Hive 메타스토어에 대해 Athena 쿼리를 실행합니다. 하지만 Lambda의 호출 페이로드 한도는 6MB입니다. Lambda에서 반환된 객체의 크기가 6MB를 초과하면 이 오류가 발생합니다. Lambda 페이로드 한도는 엄격한 한도로 늘릴 수 없습니다. 자세한 내용은 Lambda 할당량을 참조하세요.

이 오류를 해결하려면 다음 솔루션 중 하나 이상을 선택하세요.

  • Lambda 함수의 응답 페이로드를 Amazon S3 버킷에 객체로 업로드합니다. 그런 다음 이 객체를 Lambda 함수 응답페이로드로 포함합니다. 객체에 대해 미리 서명된 URL을 생성하는 방법에 대한 자세한 내용은 미리 서명된 URL을 사용하여 객체 공유를 참조하세요.
  • 테이블이 분할되어 있고 사용 사례에서 허용하는 경우 특정 파티션만 쿼리하세요.
  • Lambda 함수를 생성할 때 Amazon S3 내 유출 위치를 지정하세요. 임계값보다 큰 응답은 지정된 S3 위치로 유출됩니다.

"HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog"

이 오류는 다음 이유 중 하나로 인해 발생합니다.

  • 파티션 메타데이터에 있는 열 이름에는 밑줄 이외의 특수 문자가 포함되어 있습니다. 자세한 내용은 테이블, 데이터베이스 및 열 이름을 참조하세요.
  • 파티션 메타데이터에 정의된 StorageDescriptor에서 SerDe 정보가 누락되었습니다.

문제가 있는 파티션을 식별하려면 다음 중 하나를 수행합니다.

파티션 문제를 해결하려면 DDL 문 ALTER TABLE DROP PARTITION을 실행하여 파티션을 삭제합니다. 다음 중 하나를 수행하세요.

관련 정보

Athena에서의 문제 해결

AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠