

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の 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` 句以外の場所にあるネストされたデータにアクセスするサブクエリは、単一の値を返す必要があります。唯一の例外は、`(NOT) EXISTS` 句の `WHERE` 演算子です。
+ `(NOT) IN` はサポートされていません。
+ ネストされたすべてのタイプの最大ネスト深度は 100 です。この制限は、すべてのファイル形式 (Parquet、ORC、Ion、JSON) に適用されます。
+ ネストデータにアクセスする集約サブクエリは、`arrays` 句の `maps` および `FROM` のみを参照できます。外部テーブルは参照できません。
+ Redshift Spectrum テーブル内のネストされたデータの疑似列のクエリはサポートされていません。詳細については、「[疑似列](c-spectrum-external-tables.md#c-spectrum-external-tables-pseudocolumns)」を参照してください。
+ 配列またはマップの列を `FROM` 句で指定してデータを抽出する場合、それらの列から、`scalar` である値のみを選択できます。例えば、以下のクエリは両方とも、配列内の要素を `SELECT` しようとしています。`arr.a` を選択するクエリは、`arr.a` が `scalar` 値であるため機能します。2 番目のクエリは、`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` ステートメントでインデックスを使用することを検討してください。