

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 제한 사항
<a name="limitations-super"></a>

Amazon Redshift를 사용하면 SUPER 데이터 유형을 사용하여 JSON, Avro 또는 Ion 등의 반정형 데이터를 저장 및 쿼리할 수 있습니다. SUPER 데이터 유형 제한 사항에서는 Amazon Redshift에서 이 데이터 유형을 사용할 때의 제약 조건과 한계를 알려줍니다. 다음 섹션에서는 반정형 데이터 내에서 지원되는 최대 크기, 중첩 수준 및 데이터 유형 등 SUPER 데이터 유형의 특정 제한 사항에 대한 세부 정보를 제공합니다.
+ SUPER 열을 배포 또는 정렬 키로 정의할 수 없습니다.
+ 개별 SUPER 객체는 최대 16MB의 데이터를 저장할 수 있습니다.
+ SUPER 데이터 유형의 배열 및 구조의 최대 중첩 깊이는 1,000입니다.
+ 단일 SUPER 객체에 저장된 모든 문자열 리터럴은 16,000,000바이트로 제한됩니다.
+ 그렇지 않으면 SUPER 객체 내의 개별 값은 해당 Amazon Redshift 유형의 최대 길이로 제한됩니다.
+ SUPER 열에서는 부분 업데이트 또는 변환 작업을 수행할 수 없습니다.
+ 오른쪽 조인 또는 전체 외부 조인에서는 SUPER 데이터 형식과 별칭을 사용할 수 없습니다.
+ SUPER 데이터 형식은 XML을 인바운드 또는 아웃바운드 직렬화 형식으로 지원하지 않습니다.
+ 중첩 해제를 위해 테이블 변수를 참조하는 하위 쿼리(상관 여부에 관계 없음)의 FROM 절에서 쿼리는 상위 테이블만 참조할 수 있고 다른 테이블은 참조할 수 없습니다.
+  재귀 공통 테이블 표현식(`WITH RECURSIVE`)으로 생성된 SUPER 열에서는 중첩 해제 또는 객체 피벗 해제를 수행할 수 없습니다. 재귀 CTE에 대한 자세한 내용은 [재귀적인 공통 테이블 표현식](r_WITH_clause.md#r_WITH_clause-recursive-cte) 섹션을 참조하세요.
+ 캐스팅 제한

  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는 하위 쿼리로 IN 함수의 외부 테이블 또는 왼쪽(LHS)을 중첩 해제하는 이러한 하위 쿼리에서 RANDOM( ) 또는 TIMEOFDAY( )와 같은 휘발성 함수를 지원하지 않습니다.