巢狀資料限制 (預覽) - Amazon Redshift

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

巢狀資料限制 (預覽)

本主題說明使用 Redshift 頻譜讀取巢狀資料的限制。嵌套數據是包含嵌套字段的數據。巢狀欄位是以單一實體形式結合在一起的欄位,例如陣列、結構或物件。

注意

以下清單中標記 (預覽) 的限制僅適用於預覽叢集,以及在下列區域中建立的預覽工作群組。

  • 美國東部 (俄亥俄) (us-east-2)

  • 美國東部 (維吉尼亞北部) (us-east-1)

  • 美國西部 (加利佛尼亞北部) (us-west-1)

  • 亞太區域 (東京) (ap-northeast-1)

  • 歐洲 (愛爾蘭) (eu-west-1)

  • 歐洲 (斯德哥爾摩) (eu-north-1)

如需有關設定預覽叢集的詳細資訊,請參閱 Amazon Redshift 管理指南中的建立預覽叢集。如需設定預覽工作群組的詳細資訊,請參閱 Amazon Redshift 管理指南中的建立預覽工作群組

下列限制適用巢狀資料:

  • arraymap 類型可以包含其他 arraymap 類型,只要嵌套 arrays 上的查詢或 maps 不傳回 scalar 值。(預覽)

  • Amazon Redshift Spectrum 僅以外部資料表形式支援複雜資料類型。

  • 子查詢結果資料欄必須是最上層。(預覽)

  • 如果 OUTER JOIN 表達式參照巢狀資料表,則只能參考該資料表和其巢狀陣列 (和對映)。如果 OUTER JOIN 表達式未參考巢狀資料表,則可以參考任何數量的非巢狀資料表。

  • 如果子查詢中的 FROM 子句參考巢狀資料表,則不能參考任何其他資料表。

  • 如果子查詢取決於參考上層資料表的巢狀資料表,則子查詢只能在 FROM 子句中使用上層資料表。您無法在任何其他子句中使用上層,例如 SELECTWHERE 子句。例如,下列查詢不會執行,因為子查詢的 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 子句中 (而非外部資料表) 的 arraysmaps

  • 不支援查詢 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 陳述式中使用索引。