제한 사항 - Amazon Redshift

제한 사항

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( )와 같은 휘발성 함수를 지원하지 않습니다.