限制 - Amazon Redshift

Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

限制

透過 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 的詳細資訊,請參閱 遞迴一般資料表表達式

  • 轉換限制

    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) 與此類子查詢解除巢狀化。