csv
파일을 Redshift
환경에 다음과 같은 COPY
명령어를 통해 벌크 업데이트 해 주었다.
COPY RAW_DATA.CODE_DETAIL
FROM 's3://tour-dashboard-4-2/csv_data/CODE_DETAIL.csv'
credentials 'aws_iam_role=arn:aws:iam::433690009634:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes
에러가 발생하였고 에러에서는 sys_load_error_detail
테이블을 조회하라고 안내해 주었다.
해당 테이블이 Redshift
내에서 에러 로그를 쌓아 주는 테이블로 보였다.
SELECT *
FROM SYS_LOAD_ERROR_DETAIL;
다음과 같은 명령어를 통해 조회하니 에러 목록이 떴다.
모두 동일한 오류였고 오류 메시지는 다음과 같았다.
String contains invalid or unsupported UTF8 codepoints. Bad UTF8 hex sequence: bc (error 3)
UTF8 파일이 유효하지 않거나 지원하지 않는 형식이라는 안내 문구였다. 인코딩 형식이 잘못됐다는 것을 인지했다.
인코딩 형식이 잘못된 건 맞는 것 같았지만 조금 확실히 하기 위해 COPY
명령어 뒤에 다음과 같은 옵션을 붙여 주었다.
ACCEPTINVCHARS ESCAPE
ACCEPTINVCHARS
는 데이터베이스나 데이터 로드 도구에서 사용되는 옵션으로 유효하지 않은 문자가 포함된 옵션을 어떻게 처리할지를 지정해 준다.ESCAPE
는 데이터의 특정 문자를 특수한 의미로 해석되지 않도록 처리하거나 말 그대로 그냥 이스케이프(ESCAPE) 지나가는 것이다.COPY
명령어 뒤에 옵션으로 주어 유효하지 않은 문자가 포함된 옵션이 나오면 지나가도록 처리해 주고 다시 실행해 주었다.COPY RAW_DATA.CODE_DETAIL
FROM 's3://tour-dashboard-4-2/csv_data/CODE_DETAIL.csv'
credentials 'aws_iam_role=arn:aws:iam::433690009634:role/redshift.read.s3'
delimiter ',' dateformat 'auto' timeformat 'auto' IGNOREHEADER 1 removequotes ACCEPTINVCHARS ESCAPE;
한글로 된 데이터들이 다 깨져서 나오는 것을 볼 수 있었다. 해당 인코딩 형식이 잘못된 것 같아 메모장을 통해 인코딩 형식을 UTF-8
로 바꿔 주었다.