2017-02-19 1 views
0

은 내가, UTF-8로 정확히 것 같습니다과 같이하지 않는 파일 인코딩에서 탭으로 구분 된 데이터로 채울 테이블을 가지고있다 완료 됨Redshift에 VARCHAR 너무 좁은

SELECT 
MAX(LEN(url)) 
FROM tab 

1525을 반환합니다. 나는 공간을 낭비하고 있기 때문에 varchar(1525) 대신에 varchar(2000)을 사용하여 거의 4 분의 1까지 열의 크기를 조정할 수 있습니다. 그러나 COPY을 다시 실행하거나 새 테이블을 설정하거나 이미 가져온 데이터를 삽입하는 작업도 마찬가지입니다. 두 경우 모두 얻을 수 있습니다.

error: Value too long for character type 

왜 열에 이러한 값이 저장되지 않습니까?

답변

5

파일이 멀티 바이트 형식 일 수 있습니다. LEN Function documentation에서

:

Len 함수는 입력 문자열의 문자 수를 나타내는 정수를 반환합니다. LEN 함수는 실제 바이트 수가 아닌 다중 바이트 문자열의 문자 수를 반환합니다. 예를 들어, 3 개의 4 바이트 중국어 문자를 저장하려면 VARCHAR (12) 열이 필요합니다. LEN 함수는 동일한 문자열에 대해 3을 반환합니다.

VARCHAR의 추가 크기 때문에 아마존 Redshift에 의해 사용 된 압축 방법에 디스크 공간이 낭비되지 않지만 블록이 디스크로부터 판독하고 메모리로 압축 해제 될 때 그 메모리 버퍼 공간을 낭비 할 것이다.