

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 物件最多可容納 16 MB 的資料。
+ 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 等級的整數和小數。
  + 如果小數位數不為零，SUPER 資料類型與其他 Amazon Redshift 資料類型具有相同的行為，不同之處在於 Amazon Redshift 會將 SUPER 相關錯誤轉換為 null，如下列範例所示。

    ```
    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。一般而言，您不需要將非純量值轉換為 varchar，因為 Amazon Redshift 會隱含序列化，如下列第一個範例所示。

    ```
    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 不支援子查詢中的揮發性函數，例如 RANDOM ( ) 或 TIMEOFDAY ( )，這些子查詢將外部資料表或 IN 函數的左側 (LHS) 與此類子查詢解除巢狀化。