限制 - Amazon Redshift

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

限制

使用 SUPER 數據類型時,您可以找到以下相關限制:

  • 您不能將 SUPER 列定義為分配鍵或排序鍵。

  • 超級數據類型僅支持單個 SUPER 對象最多 1MB 的數據。

  • SUPER 對象中的單個值僅限於相應 Amazon Redshift 類型的最大長度。例如,加載到 SUPER 的單個字符串值限製為 65535 字節的最大 VARCHAR 長度。

  • 您無法對 SUPER 列執行部分更新或轉換操作。

  • 您不能在右連接或完全外連接中使用 SUPER 數據類型及其別名。

  • SUPER 數據類型不支持 XML 作為入站或出站序列化格式。

  • 在引用用於取消嵌套的表變量的子查詢(相關或不相關)的 FROM 子句中,查詢只能引用其父表而不能引用其他表。

  • 鑄造限制

    SUPER 值可以轉換到其他數據類型或從其他數據類型轉換,但以下例外情況除外:

    • Amazon Redshift 不區分 0 級的整數和小數位數。

    • 如果尺度不為零,則 SUPER 數據類型具有與其他 Amazon Redshift 數據類型相同的行為,只不過 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 不會將日期和時間類型轉換為超級數據類型。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 不支持超級數據類型。對於不區分大小寫的列,Amazon Redshift 不會將它們轉換為 SUPER 類型。因此,Amazon Redshift 不支持與觸發轉換的不區分大小寫的列交互的 SUPER 列。

  • Amazon Redshift 不支持易失性函數,如 RANDAND () 或 TIMEOFDAY (),這些子查詢將外部表或 IN 函數的左側 (LHS) 與此類子查詢取消嵌套。