데이터 타입 - Amazon Redshift

데이터 타입

Amazon Redshift가 저장하거나 가져오는 값은 각각 고정적으로 연결된 속성 집합이 포함된 데이터 형식을 가지고 있습니다. 데이터 형식은 테이블을 생성할 때 선언됩니다. 열이나 인수에 포함될 수 있는 값도 이 데이터 형식에 따라 결정됩니다.

다음 표는 Amazon Redshift 테이블에서 사용할 수 있는 데이터 형식을 나열한 것입니다.

데이터 유형 에일리어스 설명
SMALLINT INT2 2바이트 부호화 정수
INTEGER INT, INT4 4바이트 부호화 정수
BIGINT INT8 8바이트 부호화 정수
DECIMAL NUMERIC 정밀도를 선택할 수 있는 정확한 숫자
REAL FLOAT4 단정밀도 부동 소수점 수
DOUBLE PRECISION FLOAT8, FLOAT 배정밀도 부동 소수점 수
CHAR CHARACTER, NCHAR, BPCHAR 고정 길이 문자열
VARCHAR CHARACTER VARYING, NVARCHAR, TEXT 사용자 정의 제한이 포함된 가변 길이 문자열
날짜 날짜(년, 월, 일)
TIME TIME WITHOUT TIME ZONE Time of day
TIMETZ TIME WITH TIME ZONE Time of day with time zone
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE 날짜/시간(시간대 제외)
TIMESTAMPTZ TIMESTAMP(시간대 사용) 날짜/시간(시간대 포함)
INTERVAL YEAR TO MONTH 년-월 단위의 기간
INTERVAL DAY TO SECOND 일-초 단위의 기간
BOOLEAN BOOL 논리적 부울(true/false)
HLLSKETCH HyperLogLog 스케치와 함께 사용되는 형식입니다.
SUPER ARRAY 및 STRUCTS와 같은 복합 유형을 포함하여 Amazon Redshift의 모든 스칼라 유형을 포괄하는 상위 집합 데이터 유형입니다.
VARBYTE VARBINARY, BINARY VARYING 가변 길이 이진 값
GEOMETRY 공간 데이터
GEOGRAPHY 공간 데이터
참고

“char”(char는 인용 부호로 묶임) 등 지원되지 않는 데이터 형식에 대한 자세한 내용은 지원되지 않는 PostgreSQL 데이터 유형 섹션을 참조하세요.

멀티바이트 문자

VARCHAR 데이터 형식은 최대 4바이트의 UTF-8 멀티바이트 문자를 지원합니다. 5바이트 이상의 문자는 지원되지 않습니다. 멀티바이트 문자가 포함된 VARCHAR 열의 크기를 계산하려면 문자 수를 문자당 바이트 수와 곱셈합니다. 예를 들어 문자열에 한자가 4개 포함되어 있고, 각 문자의 길이가 3바이트라면 문자열을 저장하는 데 VARCHAR(12) 열이 필요합니다.

VARCHAR 데이터 유형은 다음과 같이 잘못된 UTF-8 코드포인트를 지원하지 않습니다.

0xD800 – 0xDFFF(바이트 시퀀스: ED A0 80~ED BF BF)

CHAR 데이터 유형은 멀티바이트 문자를 지원하지 않습니다.

형식 호환성 및 변환

이번 섹션에서는 Amazon Redshift의 형식 변환 규칙과 데이터 형식 호환성의 적용 방식에 대한 설명을 살펴볼 수 있습니다.

호환성

데이터 형식 일치, 즉 리터럴 값 및 상수를 데이터 형식과 일치시키는 것은 아래 작업을 포함해 다양한 데이터베이스 작업에서 발생합니다.

  • 테이블에 대한 데이터 조작 언어(DML) 작업

  • UNION, INTERSECT 및 EXCEPT 쿼리

  • CASE 표현식

  • LIKE, IN 등 조건자 평가

  • 데이터를 비교하거나 추출하는 SQL 함수에 대한 평가

  • 수학 연산자를 사용한 비교

위의 작업 결과는 형식 변환 규칙과 데이터 형식 호환성에 따라 달라집니다. 호환성에는 특정 값과 특정 데이터 형식의 1대 1 일치가 항상 필요한 것은 아니라는 의미가 내포되어 있습니다. 일부 데이터 형식은 호환이 가능하기 때문에 묵시적 변환, 즉 강제 변환이 가능합니다(자세한 내용은 묵시적인 변환 형식 단원 참조). 데이터 형식이 호환되지 않을 때는 명시적인 변환 함수를 사용하여 다른 데이터 형식으로 값을 변환할 수 있는 경우도 있습니다.

일번적인 호환성 및 변환 규칙

호환성 및 변환 규칙은 다음과 같습니다.

  • 일반적으로 동일한 형식 카테고리에 해당하는 데이터 형식(여러 가지 숫자 데이터 형식 등)은 서로 호환이 가능하기 때문에 묵시적으로 변환할 수 있습니다.

    예를 들어 묵시적인 변환을 통해 소수 값을 정수 열에 삽입할 수 있습니다. 이때 소수는 정수로 반올림됩니다. 또는 날짜에서 2008 같은 숫자 값을 추출하여 정수 열에 삽입하는 것도 가능합니다.

  • 숫자 데이터 형식은 범위 외 값을 삽입하려고 할 때 오버플로우 조건이 발생할 가능성이 높습니다. 예를 들어 정밀도가 5인 소수 값은 정밀도가 4로 정의된 DECIMAL 열에 맞지 않습니다. 소수에서 정수부는 절대로 잘리지 않지만 소수부는 상황에 따라 반올림 또는 내림 처리할 수 있습니다. 하지만 테이블에서 선택한 값의 명시적인 변환 결과는 반올림되지 않습니다.

  • 다른 형식의 문자열도 호환이 가능합니다. 예를 들어 단일 바이트 데이터가 포함된 VARCHAR 열과 CHAR 열 문자열은 서로 호환이 되어 묵시적으로 변환할 수 있습니다. 멀티바이트 데이터가 포함되는 VARCHAR 문자열은 호환되지 않습니다. 그 밖에 문자열이 적합한 리터럴 값인 경우에는 문자열을 날짜, 시간, 타임스탬프 또는 숫자 값으로 변환할 수도 있습니다. 이때 선행 또는 후행 공백은 무시됩니다. 반대로 날짜, 시간, 타임스탬프 및 숫자 값을 고정 길이 또는 가변 길이 문자열로 변환하는 것도 가능합니다.

    참고

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

  • DECIMAL 값을 문자열과 비교하면 Amazon Redshift는 문자열을 DECIMAL 값으로 변환하려고 시도합니다. 모든 다른 숫자 값을 문자열과 비교하는 경우 숫자 값이 문자열로 변환됩니다. 반대 변환(예: 문자열을 정수로 변환하거나 DECIMAL 값을 문자열로 변환)을 적용하려면 CAST과 같은 명시적 함수를 사용하세요.

  • 64비트 DECIMAL 또는 NUMERIC 값의 정밀도를 높여서 변환하려면 CAST 또는 CONVERT 같은 명시적인 변환 함수를 사용해야 합니다.

  • DATE 또는 TIMESTAMP를 TIMESTAMPTZ로 변환하거나 TIME을 TIMETZ로 변환할 때 시간대는 현재 세션 시간대로 설정됩니다. 세션 시간대는 기본적으로 UTC입니다. 세션 시간대 설정에 대한 자세한 내용은 timezone 섹션을 참조하세요.

  • 마찬가지로 TIMESTAMPTZ 역시 현재 세션 시간대에 따라 DATE, TIME 또는 TIMESTAMP로 변환됩니다. 세션 시간대는 기본적으로 UTC입니다. 변환 후에는 시간대 정보가 삭제됩니다.

  • 시간대를 지정하여 타임스탬프를 표현한 문자열은 현재 세션 시간대(기본적으로 UTC)에 따라 TIMESTAMPTZ로 변환됩니다. 마찬가지로 시간대가 지정된 시간을 표현하는 문자열은 현재 세션 시간대(기본값 UTC)를 사용하여 TIMETZ로 변환됩니다.

묵시적인 변환 형식

묵시적인 변환 유형은 다음과 같이 두 가지입니다.

  • 인수의 묵시적 변환(INSERT 또는 UPDATE 명령의 값 설정 등)

  • 표현식의 묵시적 변환(WHERE 절의 비교 등)

다음 표는 인수 또는 표현식에서 묵시적으로 변환할 수 있는 데이터 형식을 나열한 것입니다. 그 밖에 명시적인 변환 함수를 통한 변환도 가능합니다.

입력 형식 출력 형식
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
날짜 CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT, INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
날짜
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
날짜
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
INTERVAL DAY TO SECOND
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
참고

TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ 또는 문자열 사이의 묵시적인 변환은 현재 세션 시간대를 사용합니다. 현재 시간대 설정에 대한 자세한 내용은 timezone 섹션을 참조하세요.

GEOMETRY 및 GEOGRAPHY 데이터 유형은 서로를 제외하고 다른 데이터 유형으로 암시적으로 변환될 수 없습니다. 자세한 내용은 CAST 함수 단원을 참조하십시오.

VARBYTE 데이터 유형은 암시적으로 다른 데이터 유형으로 변환될 수 없습니다. 자세한 내용은 CAST 함수 단원을 참조하십시오.

SUPER 데이터 형식에 동적 형식 지정 사용

Amazon Redshift는 동적 형식 지정을 사용하여 쿼리에 사용하기 전에 데이터 형식을 선언할 필요 없이 스키마 없는 SUPER 데이터를 처리합니다. 동적 형식 지정은 Amazon Redshift 형식으로 명시적으로 캐스팅하지 않고도 SUPER 데이터 열로 이동한 결과를 사용합니다. SUPER 데이터 형식에 동적 입력 사용에 대한 자세한 내용은 동적 형식 지정 섹션을 참조하세요.

몇 가지 예외를 제외하고는 SUPER 값을 다른 데이터 형식과 캐스팅할 수 있습니다. 자세한 내용은 제한 사항 단원을 참조하십시오.