

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# 巢狀資料限制 (預覽)
<a name="nested-data-restrictions"></a>

本主題說明使用 Redshift Spectrum 讀取巢狀資料的限制。巢狀資料是包含巢狀欄位的資料。巢狀欄位是聯結在一起成為單一實體的欄位，例如陣列、結構或物件。

**注意**  
以下清單中標記 (預覽) 的限制僅適用於在下列區域中建立的預覽叢集。  
美國東部 (俄亥俄) (us-east-2)
美國東部 (維吉尼亞北部) (us-east-1)
美國西部 (加利佛尼亞北部) (us-west-1)
亞太區域 (東京) (ap-northeast-1)
歐洲 (愛爾蘭) (eu-west-1)
歐洲 (斯德哥爾摩) (eu-north-1)
如需有關設定預覽叢集的詳細資訊，請參閱 *Amazon Redshift 管理指南*中的[建立預覽叢集](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#cluster-preview)。

下列限制適用巢狀資料：
+ `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。此限制適用所有檔案格式 (Parquet、ORC、Ion 和 JSON)。
+ 存取巢狀資料的彙總子查詢只能參考其 `FROM` 子句中 (而非外部資料表) 的 `arrays` 和 `maps`。
+ 不支援查詢 Redshift Spectrum 資料表中巢狀資料的虛擬資料欄。如需詳細資訊，請參閱[虛擬資料欄](c-spectrum-external-tables.md#c-spectrum-external-tables-pseudocolumns)。
+ 當透過在 `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` 陳述式中使用索引。