새소식

반응형
AWS/Redshift

[Redshift] error: Spectrum Scan Error code: 15007

  • -
반응형

안녕하세요. 주형권입니다.

 

Redshift에 관련하여 오랜만에 글을 작성하는거 같습니다. 최근 입사한 회사에서 Redshift를 사용하려고 하고 있어서 여러가지 테스트를 하는 와중에 오류를 발견하고 해결하는 과정에서 여러가지 삽질(?)을 경험하고 쉽게 해결하는 방법을 찾아서 공츄 차원에서 글을 작성 하였습니다.

 


🤔 무엇을 하려고 하였는가?

Redshift의 COPY를 이용하여 S3에 Parquet 형태로 저장된 데이터를 Redshift 테이블에 입력하고자 하였습니다. COPY의 경우 테이블을 만들면서 들어가는 경우는 지원하지 않는것 같고 이미 있는 테이블에 INSERT만 지원하는 것으로 보였습니다. 그래서 최초에 테이블을 만들어줘야 하는데요. 

 

Glue 카탈로그를 이용하여 Athena에 있는 데이터의 DDL 생성을 통해서 CREATE TABLE 구문을 추출하여 Redshift의 데이터 타입에 맞게 수정하여 데이터를 INSERT 하려고 하였습니다. 

 


😵 무슨 오류가 발생 하였는가?

아래의 구문을 이용하여 데이터를 INSERT 하려고 하였습니다. ( Redshift COPY 문서 )

COPY table_name FROM 's3 path'
CREDENTIALS 'aws_access_key_id=;aws_secret_access_key='
FORMAT AS PARQUET

 

그런데 다음과 같이 오류가 발생 하였습니다.

ERROR: Spectrum Scan Error Detail: 
----------------------------------------------- 
error: Spectrum Scan Error code: 15007? 
context: File 'S3파일 경로' has an incompatible Parquet schema for column 'S3경로 query: 51603128 
location: dory_util.cpp:1510 
process: worker_thread [pid=3213] 
----------------------------------------------- 
[ErrorId: 1-6462ee2b-77cd0d217be21a3c3b162082]

 


🫡 어떻게 해결하였는가?

위의 내용에서 error: Spectrum Scan Error code: 15007 라는 Keyword를 통해서 검색을 해봤습니다. 구글에 검색을 하였는데, 바로 공식문서가 나와서 확인 해봤습니다. 내용에 호환되지 않는 데이터 형식이라는 내용이 있어서 바로 봤습니다. ( 문서 바로가기 )

 

구글 검색 결과

 

아래의 Query를 Redshift에서 실행해서 결과를 볼 수 있는 것 같았습니다. 그런데 결과가 딱히 나오지 않아서 조금 Query를 변경해서 다른 방법으로 검색 하였습니다. 

select message 
from svl_s3log 
where query = pg_last_query_id() 
order by query,segment,slice;

 

오류의 내용에 보면 pid값이 있습니다. 3213번 pid에 오류가 있다고 나오니 해당 테이블에서 pid를 검색해서 확인해봤습니다. 

select * 
from svl_s3log 
where pid = 3213
order by query,segment,slice;

 

아래의 내용의 결과가 message 컬럼에 나타납니다.

Spectrum Scan Error. File ‘S3파일 위치’ 
has an incompatible Parquet schema for column ‘S3파일 위치.컬럼명’ 
Column type: DOUBLE, Parquet schema: optional fixed_len_byte_array 컬럼명 [i:4 d:1 r:0] (S3파일명)

위의 내용을 보면 Column type: DOUBLE, Parquet schema: optional fixed_len_byte_array 특정 컬럼이 DOBLE 로 해줘야 할거 같습니다. 저는 대충 FLOAT로 하면 될거라고 생각해서 다 FLOAT으로 줬는데... 범위를 넘어가는거 같습니다. 그래서 DOBLE로 변경 했더니 정상적으로 입력 됐습니다.

 

 


😜 참고 자료

 

https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c-spectrum-troubleshooting.html#spectrum-troubleshooting-incompatible-data-format

 

Amazon Redshift Spectrum에서 쿼리 문제 해결 - Amazon Redshift

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/c_Supported_data_types.html

 

데이터 유형 - Amazon Redshift

문자열을 숫자 형식으로 변환하려면 문자열에 숫자를 표현한 문자가 있어야 합니다. 예를 들어 '1.0'이나 '5.9' 같은 문자열은 소수 값으로 변환할 수 있지만 문자열 'ABC'는 어떤 숫자 형식으로도

docs.aws.amazon.com

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.