本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
限制
使用 Amazon Redshift,您可以使用SUPER資料類型來儲存和查詢半結構化資料,例如 JSON、Avro 或 Ion。SUPER 資料類型限制是指在 Amazon Redshift 中使用此資料類型時的限制和界限。下列各節提供有關SUPER資料類型特定限制的詳細資訊,例如大小上限、巢狀層級,以及半結構化資料中支援的資料類型。
您無法將SUPER資料欄定義為分佈或排序索引鍵。
個別SUPER物件最多可存放 16 MB 的資料。
SUPER 物件中的個別值限制為對應 Amazon Redshift 類型的長度上限。例如,載入至 VARCHAR的單一字串值SUPER長度上限為 65535 位元組。
您無法在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) 與此類子查詢巢狀的子查詢中。