Amazon Athena에서 테이블을 쿼리할 때 “HIVE_CURSOR_ERROR” 예외가 발생하는 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Athena 테이블에서 쿼리를 실행하면 “HIVE_CURSOR_ERROR” 예외가 발생합니다.

해결 방법

다음 조건 중 하나에서 이 예외가 발생할 수 있습니다.

  • 테이블 위치의 데이터 객체가 손상되었거나 유효하지 않거나 잘못 압축된 경우.
  • 테이블 데이터 내의 레코드가 유효하지 않은 경우(예: 잘못된 JSON 레코드).

일반적인 HIVE_CURSOR_ERROR 예외 사항

Amazon Simple Storage Service (Amazon S3) 테이블 위치에서 이러한 객체에 문제가 있는 경우 다음 예외 중 하나가 발생할 수 있습니다.

  • HIVE_CURSOR_ERROR: incorrect header check
  • HIVE_CURSOR_ERROR: invalid block type
  • HIVE_CURSOR_ERROR: incorrect data check
  • HIVE_CURSOR_ERROR: Unexpected end of input stream
  • HIVE_CURSOR_ERROR: invalid stored block lengths
  • HIVE_CURSOR_ERROR: invalid distance code

최근에 Amazon S3 테이블 위치에 새 객체를 추가한 경우 이러한 객체가 유효하고 손상되지 않았는지 확인하세요. 객체를 다운로드한 다음 자주 사용하는 도구를 사용하여 검사하세요. 예를 들어 GZIP으로 압축된 객체의 압축을 풀어 압축이 유효한지 확인합니다.

테이블이 분할된 경우 개별 파티션을 쿼리할 수 있는지 확인합니다. 테이블에 새 파티션이 있는 경우 유효하지 않은 객체가 포함되어 있을 수 있습니다.

특정 HIVE_CURSOR_ERROR 예외

HIVE_CURSOR_ERROR: Row is not a valid JSON Object

테이블 내의 행이 유효한 JSON 레코드가 아닐 때 이 오류가 발생합니다.

이 문제를 해결하려면 다음을 수행하세요.

  1. 'ignore.malformed.json' = 'true' 속성을 추가하여 테이블을 다시 만듭니다.
  2. 새 테이블을 쿼리하는 명령을 실행하여 다음과 유사한 잘못된 레코드가 있는 파일을 식별합니다.
SELECT "$path" FROM example_table WHERE example_column = NULL

자세한 내용은 Amazon Athena에서 JSON 데이터를 읽으려고 하면 왜 오류가 발생하나요?OpenX JSON SerDe를 참고하세요.

HIVE_CURSOR_ERROR: Corrupted uncompressed block

이 오류는 테이블 위치의 객체를 압축하기 위해 LZO 형식을 사용할 때 발생합니다.

LZO 압축 데이터로 이 오류를 해결하려면 입력 형식 "com.hadoop.mapred.DeprecatedLzoTextInputFormat"을 사용하여 테이블을 다시 생성합니다. 예를 들면, 다음과 같습니다.

CREATE EXTERNAL TABLE example_table (    example_column_1 STRING,
    example_column_2 STRING
)
STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://example_bucket/example_prefix/'

다른 압축 형식을 사용하여 이 오류를 해결할 수도 있습니다.

HIVE_CURSOR_ERROR: Can not read value at 0 in block 0 in file

이 오류는 S3 경로에 유효하지 않은 Parquet 객체가 있을 때 발생합니다. Parquet 객체에 10진수 데이터 유형이 포함되어 있는지 확인하세요. Spark를 사용하여 DECIMAL 데이터 유형이 포함된 Parquet 객체를 작성한 경우, 해당 객체가 Hive와 호환되지 않을 수 있습니다. 이 조건을 확인하려면 Spark 작업에서 Parquet 객체를 읽어보세요.

Spark 작업을 사용하여 Parquet 객체를 읽을 수 있는 경우 다음 구성을 사용하여 Spark에서 레거시 모드로 객체를 다시 작성합니다.

spark.sql.parquet.writeLegacyFormat = true

Parquet에 대한 Spark 구성 옵션에 대한 자세한 내용은 Spark SQL 웹 사이트에서 Configuration을 참고하세요.

HIVE_CURSOR_ERROR: org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.io.Text

테이블 정의에 잘못된 SerDe를 사용한 경우 이 오류가 발생합니다. 예를 들어 테이블이 JSON SerDe를 사용하고 소스 데이터에 Parquet 객체가 포함되어 있을 수 있습니다.

이 오류를 해결하려면 소스 데이터를 확인하고 올바른 SerDe가 사용되었는지 확인합니다. 자세한 내용은 지원되는 SerDe 및 데이터 형식을 참고하세요.

AWS 구성의 읽은 파일에서 HIVE_CURSOR_ERROR 오류 발생

HIVE_CURSOR_ERROR: java.io.IOException: Start of Object expected

이 오류는 데이터 JsonSerDe가 JSON 레코드의 시작 객체를 가져올 수 없을 때 발생합니다. 데이터가 스키마와 일치하지 않거나 쿼리를 실행할 때 파일이 손상된 경우입니다.

이 오류를 해결하려면 기본 org.apache.hive.hcatalog.data.JsonSerDe 대신 org.openx.data.jsonserde.JsonSerDe와 같은 다른 SerDe를 사용하세요. 그런 다음 테이블 속성을 **'ignore.malformed.json' = 'true'**로 설정합니다.

자세한 내용은 JSON SerDe 라이브러리를 참고하세요.

HIVE_CURSOR_ERROR: java.io.IOException: Start token not found where expected.

이 오류는 Athena 테이블 위치에 AWS Config에서 제공한 파일 이외의 파일이 포함된 경우 발생합니다. 예를 들어, Athena 쿼리 CSV 출력이 JSON 형식의 AWS Config 파일과 동일한 위치로 설정되어 있는 경우입니다.

이 오류를 해결하려면 AWS Config에서 생성되지 않은 파일을 이동하거나 삭제하세요. Athena 쿼리 결과의 경우, 출력 파일은 다음 경로 패턴에 저장됩니다.

QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]

HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key

AWS Config 리소스에 이름이 같은 태그가 여러 개 있거나 일부는 대문자로, 일부는 소문자로 되어 있는 경우 이 오류가 발생합니다.

이 오류를 해결하려면 HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key"를 해결하려면 어떻게 해야 하나요?를 참고하세요.

관련 정보

Athena에서의 문제 해결

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