ネストデータの制限 (プレビュー)
このトピックでは、Redshift Spectrum でネストされたデータを読み込むための制限事項について説明します。ネストデータは、ネストされたフィールドを含むデータです。ネストされたフィールドは、配列、構造体、オブジェクトなど、単一のエンティティとして結合されるフィールドです。
注記
以下のリストで「(プレビュー)」と記載されている制限は、以下のリージョンで作成されたプレビュークラスターとプレビューワークグループにのみ適用されます。
米国東部 (オハイオ) (us-east-2)
米国東部 (バージニア北部) (us-east-1)
米国西部 (北カリフォルニア) (us-west-1)
アジアパシフィック (東京) (ap-northeast-1)
欧州 (アイルランド) (eu-west-1)
欧州 (ストックホルム) (eu-north-1)
プレビュークラスターの設定の詳細については、「Amazon Redshift 管理ガイド」の「プレビュークラスターの作成」を参照してください。プレビューワークグループの設定の詳細については、「Amazon 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
句以外の場所にあるネストされたデータにアクセスするサブクエリは、単一の値を返す必要があります。唯一の例外は、(NOT) EXISTS
句のWHERE
演算子です。 -
(NOT) IN
はサポートされていません。 -
ネストされたすべてのタイプの最大ネスト深度は 100 です。この制限は、すべてのファイル形式 (Parquet、ORC、Ion、JSON) に適用されます。
-
ネストデータにアクセスする集約サブクエリは、
arrays
句のmaps
およびFROM
のみを参照できます。外部テーブルは参照できません。 -
Redshift Spectrum テーブル内のネストされたデータの疑似列のクエリはサポートされていません。詳細については、「疑似列」を参照してください。
-
配列またはマップの列を
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
ステートメントでインデックスを使用することを検討してください。