제한 사항
Amazon Redshift를 사용하면 SUPER 데이터 유형을 사용하여 JSON, Avro 또는 Ion 등의 반정형 데이터를 저장 및 쿼리할 수 있습니다. SUPER 데이터 유형 제한 사항에서는 Amazon Redshift에서 이 데이터 유형을 사용할 때의 제약 조건과 한계를 알려줍니다. 다음 섹션에서는 반정형 데이터 내에서 지원되는 최대 크기, 중첩 수준 및 데이터 유형 등 SUPER 데이터 유형의 특정 제한 사항에 대한 세부 정보를 제공합니다.
SUPER 열을 배포 또는 정렬 키로 정의할 수 없습니다.
개별 SUPER 객체는 최대 16MB의 데이터를 저장할 수 있습니다.
SUPER 객체 내의 개별 값은 해당 Amazon Redshift 유형의 최대 길이로 제한됩니다. 예를 들어 SUPER에 로드되는 단일 문자열 값은 최대 VARCHAR 길이 65,535바이트로 제한됩니다.
SUPER 열에서는 부분 업데이트 또는 변환 작업을 수행할 수 없습니다.
오른쪽 조인 또는 전체 외부 조인에서는 SUPER 데이터 형식과 별칭을 사용할 수 없습니다.
SUPER 데이터 형식은 XML을 인바운드 또는 아웃바운드 직렬화 형식으로 지원하지 않습니다.
중첩 해제를 위해 테이블 변수를 참조하는 하위 쿼리(상관 여부에 관계 없음)의 FROM 절에서 쿼리는 상위 테이블만 참조할 수 있고 다른 테이블은 참조할 수 없습니다.
캐스팅 제한
SUPER 값은 다음 예외를 제외하고 다른 데이터 형식으로 또는 다른 데이터 형식에서 캐스팅할 수 있습니다.
Amazon Redshift는 정수와 소수 자릿수가 0인 소수를 구분하지 않습니다.
소수 자릿수가 0이 아닌 경우 SUPER 데이터 형식은 다음 예와 같이 Amazon Redshift가 SUPER 관련 오류를 null로 변환한다는 점을 제외하고 다른 Amazon Redshift 데이터 형식과 동일하게 동작합니다.
SELECT 5::bool; bool ------- True (1 row) SELECT 5::decimal::bool; ERROR: cannot cast type numeric to boolean SELECT 5::super::bool; bool ------- True (1 row) SELECT 5.0::bool; ERROR: cannot cast type numeric to boolean SELECT 5.0::super::bool; bool ------- (1 row)
Amazon Redshift는 날짜 및 시간 형식을 SUPER 데이터 형식으로 캐스팅하지 않습니다. Amazon Redshift는 다음 예와 같이 SUPER 데이터 형식에서 날짜 및 시간 데이터 형식만 캐스팅할 수 있습니다.
SELECT o.o_orderdate FROM customer_orders_lineitem c,c.c_orders o; order_date ------------------ "2001-09-08" (1 row) SELECT JSON_TYPEOF(o.o_orderdate) FROM customer_orders_lineitem c,c.c_orders o; json_typeof ----------------- string (1 row) SELECT o.o_orderdate::date FROM customer_orders_lineitem c,c.c_orders o; order_date ---------------- 2001-09-08 (1 row) --date/time cannot be cast to super SELECT '2019-09-09'::date::super; ERROR: cannot cast type date to super
스칼라가 아닌 값(객체 및 배열)에서 문자열로 캐스팅하면 NULL이 반환됩니다. 이러한 스칼라가 아닌 값을 올바르게 직렬화하려면 캐스팅하지 않습니다. 대신
json_serialize
를 사용하여 스칼라가 아닌 값을 캐스팅합니다.json_serialize
함수는 varchar를 반환합니다. 일반적으로 다음 첫 번째 예와 같이 Amazon Redshift가 암시적으로 직렬화하므로 스칼라가 아닌 값을 varchar로 캐스팅할 필요가 없습니다.SELECT r_nations FROM region_nations WHERE r_regionkey=300; r_nations ---------------- [1,"abc",null] (1 row) SELECT r_nations::varchar FROM region_nations WHERE r_regionkey=300; r_nations ------------- (1 row) SELECT JSON_SERIALIZE(r_nations) FROM region_nations WHERE r_regionkey=300; json_serialize ----------------- [1,"abc",null] (1 row)
대/소문자를 구분하지 않는 데이터베이스의 경우 Amazon Redshift는 SUPER 데이터 형식을 지원하지 않습니다. 대/소문자를 구분하지 않는 열의 경우 Amazon Redshift는 열을 SUPER 형식으로 캐스팅하지 않습니다. 따라서 Amazon Redshift는 캐스팅을 트리거하는 대/소문자를 구분하지 않는 열과 상호 작용하는 SUPER 열을 지원하지 않습니다.
Amazon Redshift는 하위 쿼리로 IN 함수의 외부 테이블 또는 왼쪽(LHS)을 중첩 해제하는 이러한 하위 쿼리에서 RANDOM( ) 또는 TIMEOFDAY( )와 같은 휘발성 함수를 지원하지 않습니다.