本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
限制
使用 SUPER 資料類型時,請考慮下列限制:
您無法將 SUPER 欄定義為分散或排序索引鍵。
一個單獨的 SUPER 對象最多可以容納 16 MB 的數據。
SUPER 物件中的個別值會限制為對應 Amazon Redshift 類型的最大長度。例如,載入至 SUPER 的單一字串值會限制為 65535 個位元組的最大 VARCHAR 長度。
您無法在 SUPER 欄上執行部分更新或轉換操作。
您無法在右聯結或完整外部聯結中使用 SUPER 資料類型及其別名。
SUPER 資料類型不支援 XML 做為傳入或傳出序列化格式。
在參考資料表變數進行解除巢狀化的子查詢 (無論是否相關) 的 FROM 子句中,查詢只能參考其父資料表,而不能參考其他資料表。
轉換限制
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 不支援 SUPER 資料類型。對於不區分大小寫的欄,Amazon Redshift 不會將它們轉換為 SUPER 類型。因此,Amazon Redshift 不支援 SUPER 欄與觸發轉換的不區分大小寫欄互動。
Amazon Redshift 不支援子查詢中的揮發性函數,例如 RANDOM ( ) 或 TIMEOFDAY ( ),這些子查詢將外部資料表或 IN 函數的左側 (LHS) 與此類子查詢解除巢狀化。