내용으로 건너뛰기

Amazon Athena에서 테이블을 쿼리할 때 "GENERIC_INTERNAL_ERROR" 오류를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Athena 테이블을 쿼리할 때 "GENERIC_INTERNAL_ERROR" 오류가 발생합니다.

해결 방법

"GENERIC_INTERNAL_ERROR: null"

열 데이터 유형 불일치

테이블 정의의 열 데이터 유형이 소스 데이터의 열 데이터 유형과 호환되는지 확인하십시오. Athena는 스키마 온 리드 기술을 사용합니다. Athena는 쿼리를 처리할 때 Amazon Simple Storage Service(Amazon S3)의 데이터에 테이블 정의를 적용합니다.

예를 들어 Apache Parquet 파일에서 테이블을 만들면 Athena는 파일에서 스키마를 읽습니다. 그런 다음, Athena는 Parquet을 쿼리하는 테이블 정의를 기준으로 스키마의 유효성을 검사합니다. 열 데이터 유형이 테이블 정의의 데이터 유형과 일치하지 않는 경우 "Column data type mismatch" 오류가 발생합니다.

소스 데이터 파일과 테이블 정의 간에 스키마 불일치가 있는 경우 다음 작업 중 하나를 수행하십시오.

또한 소스 데이터 파일이 손상되었는지 확인합니다. 손상된 소스 데이터 파일이 있는 경우 파일을 삭제하고 테이블을 쿼리하십시오.

부정확한 구문

다음 두 조건에 모두 해당하는 경우 "GENERIC INTERNAL ERROR: null" 오류가 발생할 수 있습니다.

CTAS 쿼리를 사용할 때는 partitioned_bybucketed_by 속성에 서로 다른 열 이름을 사용해야 합니다. 이 문제를 해결하려면 새 테이블을 만들고 partitioned_bybucketed_by에 서로 다른 열 이름을 선택하십시오.

"GENERIC_INTERNAL_ERROR: parent builder is null"

배열 열과 OpenCSVSerde 형식이 있는 테이블을 쿼리할 때 이 오류가 발생할 수 있습니다. OpenCSVSerde 형식은 배열 데이터 유형을 지원하지 않습니다.

이 문제를 해결하려면 배열 데이터 유형이 있는 열을 문자열로 변경하십시오. AWS Glue 콘솔을 사용하거나 명령을 실행하여 열의 데이터 유형을 수정할 수 있습니다. 또는 새 테이블을 만듭니다.

열의 데이터 유형 수정

AWS Glue 콘솔을 사용하려면 다음 단계를 완료하십시오.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 테이블을 선택합니다.
  3. 업데이트하려는 테이블을 선택합니다.
  4. 작업을 선택한 다음, 세부 정보 보기를 선택합니다.
  5. 스키마 편집을 선택합니다.
  6. 데이터 유형이 배열인 열을 찾은 다음, 배열을 선택합니다.
  7. 열 유형의 경우 드롭다운 목록에서 문자열을 선택합니다.
  8. 업데이트를 선택합니다.
  9. 스키마 편집 페이지에서 저장을 선택합니다.

-또는-

SHOW CREATE TABLE 명령을 실행하여 테이블을 만든 쿼리를 생성합니다. 배열 데이터 유형이 있는 열을 찾은 다음, 데이터 유형을 문자열로 변경합니다.

새 테이블 만들기

새 테이블을 만들고 열 데이터 유형으로 문자열을 선택합니다.

"GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT"

소스 INT 열의 셀에 2,147,483,647보다 큰 숫자 값이 있는 경우 이 오류가 발생할 수 있습니다.

이 문제를 해결하려면 int 데이터 유형이 있는 열을 bigint로 변경하십시오. AWS Glue 콘솔을 사용하거나 명령을 실행하여 열의 데이터 유형을 수정할 수 있습니다. 또는 새 테이블을 만듭니다.

열의 데이터 유형 수정

AWS Glue 콘솔을 사용하려면 다음 단계를 완료하십시오.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 테이블을 선택합니다.
  3. 업데이트하려는 테이블을 선택합니다.
  4. 작업을 선택한 다음, 세부 정보 보기를 선택합니다.
  5. 스키마 편집을 선택합니다.
  6. int 데이터 유형이 있는 열을 찾은 다음, int를 선택합니다.
  7. 열 유형의 경우 드롭다운 목록에서 bigint를 선택합니다.
  8. 업데이트를 선택합니다.
  9. 스키마 편집 페이지에서 저장을 선택합니다.

-또는-

SHOW CREATE TABLE 명령을 실행하여 테이블을 만든 쿼리를 생성합니다. int 데이터 유형이 있는 열을 찾은 다음, 데이터 유형을 bigint로 변경합니다.

새 테이블 만들기

새 테이블을 만들고 열 데이터 유형으로 bigint를 선택합니다.

"GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE"

소스 TINYINT 열의 셀에 잘못된 숫자 값이 있는 경우 이 오류가 발생할 수 있습니다. TINYINT 열의 최솟값은 -128이고 최댓값은 127입니다.

이 문제를 해결하려면 tinyint 데이터 유형이 있는 열을 smallint, int 또는 bigint로 변경하십시오. AWS Glue 콘솔을 사용하거나 명령을 실행하여 열의 데이터 유형을 수정할 수 있습니다. 또는 새 테이블을 만듭니다.

열의 데이터 유형 수정

AWS Glue 콘솔을 사용하려면 다음 단계를 완료하십시오.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 테이블을 선택합니다.
  3. 업데이트하려는 테이블을 선택합니다.
  4. 작업을 선택한 다음, 세부 정보 보기를 선택합니다.
  5. 스키마 편집을 선택합니다.
  6. 데이터 유형이 tinyint인 열을 찾은 다음, tinyinit를 선택합니다.
  7. 열 유형의 경우 드롭다운 목록에서 smallint, bigint 또는 int를 선택합니다.
  8. 업데이트를 선택합니다.
  9. 스키마 편집 페이지에서 저장을 선택합니다.

-또는-

SHOW CREATE TABLE 명령을 실행하여 테이블을 만든 쿼리를 생성합니다. tinyint 데이터 유형이 있는 열을 찾은 다음, 데이터 유형을 smallint, bigint 또는 int로 변경합니다.

새 테이블 만들기

새 테이블을 만들고 열 데이터 유형으로 smallint, bigint 또는 int를 선택합니다.

"GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters"

다음 이유 중 하나로 인해 Amazon S3 데이터에 일관되지 않은 파티션이 있는 경우 이 오류가 발생할 수 있습니다.

  • S3 파티션을 변경했습니다. 예를 들어 새 파티션을 추가한 경우입니다.
  • 테이블의 파티션 열 수가 파티션 메타데이터에 있는 파티션 열 수와 일치하지 않습니다.

이 문제를 해결하려면 새 테이블을 만들도록 AWS Glue 크롤러를 구성할 수 있습니다. 또는 ALTER TABLE DROP PARTITION 문을 사용하여 파티션을 삭제하십시오. 그런 다음, ALTER TABLE ADD PARTITION 문을 사용하여 테이블 정의에 있는 것과 동일한 수의 파티션을 추가합니다.

예를 들어 테이블 정의에 이름이 datecountry인 파티션 열과 date라는 열이 하나뿐인 파티션이 있습니다. date 열이 있는 파티션을 삭제한 다음, datecountry 파티션을 테이블에 추가합니다.

명령 예시:

ALTER TABLE doc_example_table DROP PARTITION (date = '2014-05-14');    
ALTER TABLE doc_example_table ADD PARTITION (date = '2016-05-14', country = 'IN');

"GENERIC_INTERNAL_ERROR: Multiple entries with same key"

같은 이름의 열이 있는 경우 유효한 키-값 페어를 포함하도록 데이터를 전처리해야 합니다. 이름이 같은 열을 무시하려면 org.openx.data.jsonserde.JsonSerDe에서 ignore.malformed.jsonSERDEPROPERTIES로 설정하십시오.

Apache Hive는 대소문자를 구분하는 열을 지원하지 않습니다. 예를 들어 이름이 Columncolumn인 열이 두 개 있는 경우 문제가 발생할 수 있습니다.

열 이름이 동일하지만 대소문자가 다른 경우, 매핑을 사용하고 JSON SerDe가 대소문자를 구분하도록 구성해야 합니다.

명령 예시:

CREATE TABLE mytable (    
  time1 string,
  time2 string)
 ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
"case.insensitive" = "false", --tells hive to ignore key case
"mapping.time1"= "time", -- lowercase 'time' mapped into 'time1'
"mapping.time2"= "Time") -- uppercase to 'time2'

관련 정보

Amazon Athena의 데이터 유형

데이터 파티셔닝

AWS 공식업데이트됨 10달 전
댓글 없음

관련 콘텐츠