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

최종 업데이트 날짜: 2021년 5월 19일

내 Amazon Athena 테이블을 쿼리하면 오류 ‘GENERIC_INTERNAL_ERROR’가 발생합니다.

간략한 설명

GENERIC_INTERNAL_ERROR 예외와 그 원인은 다음과 같습니다.

  • GENERIC_INTERNAL_ERROR: null: 다음 조건 중 하나에서 이 예외가 나타날 수 있습니다.
    • 테이블 정의에서 열의 데이터 유형 및 데이터 세트의 실제 데이터 유형 간에 스키마 불일치가 있습니다.
    • 잘못된 구문을 사용하여 CREATE TABLE AS SELECT (CTAS) 쿼리를 실행 중입니다.
  • GENERIC_INTERNAL_ERROR: parent builder is null: 데이터 유형 array 열과 SerDe 형식 OpenCSVSerDe를 사용하여 테이블을 쿼리할 때 이 예외가 나타날 수 있습니다. OpenCSVSerde 형식은 array 데이터 유형을 지원하지 않습니다.
  • GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT: 원본 데이터 열이 INT 데이터 유형으로 정의되고 숫자 값이 2,147,483,647보다 큰 경우 이 예외가 나타날 수 있습니다.
  • GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE: 원본 데이터 열의 숫자 값이 BYTE 데이터 유형에 허용되는 크기를 초과하는 경우 이 예외가 나타날 수 있습니다. 데이터 유형 BYTE는 TINYINT와 동일합니다. TINYINT는 2의 보수 형식인 8비트 부호 있는 INTEGER이며 최소 값이 -128이고 최대 값이 127입니다.
  • GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters: Amazon Simple Storage Service(Amazon S3) 데이터에 일관성이 없는 파티션이 있는 경우 이 예외가 나타날 수 있습니다. 다음 조건 중 하나에서 파티션이 일치하지 않을 수 있습니다.
    • Amazon S3의 파티션이 변경되었습니다(예: 새 파티션이 추가됨).
    • 테이블의 파티션 열 수가 파티션 메타데이터의 수와 일치하지 않습니다.

해결 방법

GENERIC_INTERNAL_ERROR:null

열 데이터 유형 불일치: 테이블 정의의 열 데이터 유형이 원본 데이터의 열 데이터 유형과 호환되는지 확인합니다. Athena는 schema-on-read 기술을 사용합니다. 즉, 쿼리가 처리될 때 테이블 정의가 Amazon S3의 데이터에 적용됩니다. 예를 들어 테이블이 Parquet 파일에 생성된 경우 Athena는 파일에서 스키마를 읽고 Parquet 파일을 쿼리할 때 테이블 정의에 대해 스키마의 유효성을 검사합니다. 열의 기본 데이터 유형이 테이블 정의 도중 언급된 데이터 유형과 일치하지 않으면 이 오류가 발생합니다.

이 문제를 해결하려면 원본 데이터 파일이 손상되지 않았는지 확인합니다. 원본 데이터 파일과 테이블 정의 간에 스키마 불일치가 있는 경우 다음 중 하나를 수행합니다.

  • AWS Glue 데이터 카탈로그를 사용하여 스키마를 업데이트합니다.
  • 업데이트된 테이블 정의를 사용하여 새 테이블을 작성합니다.

원본 데이터 파일이 손상된 경우 파일을 삭제한 다음 테이블을 쿼리합니다.

부정확한 구문: 다음 조건 모두에 해당하는 경우 ‘GENERIC INTERNAL ERROR:nul’ 오류가 발생할 수 있습니다.

이 오류를 방지하려면 CTAS 쿼리를 사용할 때 partitioned_bybucketed_by 속성에 서로 다른 열 이름을 사용해야 합니다. 이 오류를 해결하려면 partitioned_bybucketed_by 속성에 다른 열 이름을 선택하여 새 테이블을 작성합니다.

GENERIC_INTERNAL_ERROR: parent builder is null

이 오류를 해결하려면 데이터 유형 array가 있는 열을 찾은 다음 이 열의 데이터 유형을 string으로 변경합니다. 열 데이터 유형을 string으로 변경하려면 다음 중 하나를 수행합니다.

SHOW CREATE TABLE 명령을 실행하여 테이블을 작성한 쿼리를 생성할 수 있습니다. 이 명령의 출력에서 모든 열의 열 데이터 유형을 볼 수 있습니다. 데이터 유형 array가 있는 열을 찾은 다음 이 열의 데이터 유형을 string으로 변경합니다.

데이터 카탈로그로 테이블의 스키마를 업데이트하려면 다음을 수행합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 [테이블(Tables)]을 선택합니다.
  3. 업데이트할 테이블을 선택합니다.
  4. [작업(Action)]을 선택한 다음, [세부 정보 보기(View details)]를 선택합니다.
  5. [스키마 편집(Edit schema)]을 선택합니다.
  6. 데이터 유형 array가 있는 열로 스크롤한 다음 [array]를 선택합니다.
  7. [열 유형(Column type)]의 경우 드롭다운 목록에서 [string]을 선택합니다.
  8. [업데이트(Update)]를 선택합니다.
  9. [스키마 편집(Edit schema)] 페이지에서 [저장(Save)]을 선택합니다.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT

이 오류를 해결하려면 데이터 유형 int가 있는 열을 찾은 다음 이 열의 데이터 유형을 int에서 bigint로 업데이트합니다. 열 데이터 유형을 변경하려면 데이터 카탈로그에서 스키마를 업데이트하거나 업데이트된 스키마로 새 테이블을 작성합니다.

SHOW CREATE TABLE 명령을 실행하여 테이블을 작성한 쿼리를 생성할 수 있습니다. 이 명령의 출력에서 모든 열의 열 데이터 유형을 볼 수 있습니다. 데이터 유형 int가 있는 열을 찾은 다음 이 열의 데이터 유형을 bigint로 변경합니다.

데이터 카탈로그로 테이블의 스키마를 업데이트하려면 다음을 수행합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 [테이블(Tables)]을 선택합니다.
  3. 업데이트할 테이블을 선택합니다.
  4. [작업(Action)]을 선택한 다음, [세부 정보 보기(View details)]를 선택합니다.
  5. [스키마 편집(Edit schema)]을 선택합니다.
  6. 데이터 유형 int가 있는 열로 스크롤한 다음 [int]를 선택합니다.
  7. [열 유형(Column type)]의 경우 드롭다운 목록에서 [bigint]를 선택합니다.
  8. [업데이트(Update)]를 선택합니다.
  9. [스키마 편집(Edit schema)] 페이지에서 [저장(Save)]을 선택합니다.

GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE

이 오류를 해결하려면 데이터 유형 tinyint가 있는 열을 찾습니다. 그런 다음 이 열의 데이터를 유형을 smallint, int 또는 bigint로 변경합니다. 또는 업데이트된 스키마로 새 테이블을 작성하여 이 오류를 해결할 수 있습니다.

SHOW CREATE TABLE 명령을 실행하여 테이블을 작성한 쿼리를 생성할 수 있습니다. 이 명령의 출력에서 모든 열의 열 데이터 유형을 볼 수 있습니다. 데이터 유형 tinyint가 있는 열을 찾은 다음 이 열의 데이터 유형을 smallint, bigint 또는 int로 변경합니다.

데이터 카탈로그로 테이블의 스키마를 업데이트하려면 다음을 수행합니다.

  1. AWS Glue 콘솔을 엽니다.
  2. 탐색 창에서 테이블(Tables)을 선택합니다.
  3. 업데이트할 테이블을 선택합니다.
  4. [작업(Action)]을 선택한 다음, [세부 정보 보기(View details)]를 선택합니다.
  5. [스키마 편집(Edit schema)]을 선택합니다.
  6. 데이터 유형 tinyint가 있는 열로 스크롤한 다음 [tinyint]를 선택합니다.
  7. [열 유형(Column type)]의 경우 드롭다운 목록에서 [smallint], [bigint] 또는 [int]를 선택합니다.
  8. [업데이트(Update)]를 선택합니다.
  9. [스키마 편집(Edit schema)] 페이지에서 [저장(Save)]을 선택합니다.

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

이 오류를 해결하기 위해 다음 중 하나를 수행할 수 있습니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?