ネストデータの制限 (プレビュー) - Amazon Redshift

ネストデータの制限 (プレビュー)

このトピックでは、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.ascalar 値であるため機能します。2 番目のクエリは、arrayFROM 句で 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 ステートメントでインデックスを使用することを検討してください。