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