本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
巢狀資料限制 (預覽)
本主題說明使用 Redshift 頻譜讀取巢狀資料的限制。嵌套數據是包含嵌套字段的數據。巢狀欄位是以單一實體形式結合在一起的欄位,例如陣列、結構或物件。
注意
下列限制適用巢狀資料:
-
array
或map
類型可以包含其他array
或map
類型,只要嵌套arrays
上的查詢或maps
不傳回scalar
值。(預覽) -
Amazon Redshift Spectrum 僅以外部資料表形式支援複雜資料類型。
-
子查詢結果資料欄必須是最上層。(預覽)
-
如果
OUTER JOIN
表達式參照巢狀資料表,則只能參考該資料表和其巢狀陣列 (和對映)。如果OUTER JOIN
表達式未參考巢狀資料表,則可以參考任何數量的非巢狀資料表。 -
如果子查詢中的
FROM
子句參考巢狀資料表,則不能參考任何其他資料表。 -
如果子查詢取決於參考上層資料表的巢狀資料表,則子查詢只能在
FROM
子句中使用上層資料表。您無法在任何其他子句中使用上層,例如SELECT
或WHERE
子句。例如,下列查詢不會執行,因為子查詢的SELECT
子句參照上層資料表c
。SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1;
下列查詢可運作,因為上層
c
僅用於子查詢的FROM
子句。SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1;
-
存取
FROM
子句以外位置巢狀資料的子查詢必須傳回單一值。唯一的例外是WHERE
子句中的(NOT) EXISTS
運算子。 -
不支援
(NOT) IN
。 -
所有巢狀類型的最大深度為 100。此限制適用於所有檔案格式 (實木複合地板ORC、離子和JSON)。
-
存取巢狀資料的彙總子查詢只能參考其
FROM
子句中 (而非外部資料表) 的arrays
和maps
。 -
不支援查詢 Redshift Spectrum 資料表中巢狀資料的虛擬資料欄。如需詳細資訊,請參閱虛擬資料欄。
-
當透過在
FROM
子句中指定陣列或映射資料欄來擷取資料時,您只能從這些資料欄中選擇值 (如果值為scalar
)。例如,下列查詢會嘗試從陣列內部的SELECT
元素。選取arr.a
的查詢是有效的,因為arr.a
是一個scalar
值。第二個查詢不起作用,因為array
是從FROM
子句中的s3.nested table
中擷取的陣列。(預覽)SELECT array_column FROM s3.nested_table;
array_column ----------------- [{"a":1},{"b":2}]
SELECT arr.a FROM s3.nested_table t, t.array_column arr;arr.a ----- 1
--This query fails to run. SELECT array FROM s3.nested_table tab, tab.array_column array;您不能在本身來自另一個陣列或映射的
FROM
子句中使用陣列或映射。若要選取陣列或嵌套在其他陣列內的其他複雜結構,請考慮在SELECT
陳述式中使用索引。