制限事項 - Amazon Redshift

制限事項

Amazon Redshift では、SUPER データ型を使用して、JSON、Avro、Ion などの半構造化データを保存およびクエリできます。SUPER データ型の制限とは、Amazon Redshift でこのデータ型を使用する場合の制約と境界を指します。以下のセクションでは、最大サイズ、ネストレベル、半構造化データでサポートされるデータ型など、SUPER データ型の特定の制限について詳しく説明します。

  • SUPER 列をディストリビューションキーまたはソートキーとして定義することはできません。

  • 各 SUPER オブジェクトは、最大 16 MB のデータを保持できます。

  • SUPER オブジェクト内の個々の値は、Amazon Redshift 内で対応しているデータ型での最大長に制限されます。たとえば、SUPER にロードされる 1 つの文字列値は、VARCHAR の最大長 65535 バイトに制限されます。

  • SUPER 列に対して部分的な更新または変換オペレーションを実行することはできません。

  • 右結合または完全外部結合では、SUPER データ型とそのエイリアスを使用することはできません。

  • SUPER データ型は、インバウンドまたはアウトバウンドのシリアル化形式として XML をサポートしていません。

  • ネストを解除するためにテーブル変数を参照するサブクエリ (相関関係があるかどうかにかかわらず) の FROM 句では、クエリはその親テーブルのみを参照でき、他のテーブルは参照できません。

  • キャストの制限事項

    SUPER 値は、次の例外を除いて、他のデータ型との間でキャストできます。

    • Amazon Redshift は、スケール 0 の整数と小数点を区別しません。

    • スケールがゼロでない場合、SUPER データ型は他の Amazon Redshift データ型と同じ動作をします。ただし、Amazon Redshift は、次の例に示すように、スーパー関連のエラーを null に変換する点が異なります。

      SELECT 5::bool; bool ------- True (1 row) SELECT 5::decimal::bool; ERROR: cannot cast type numeric to boolean SELECT 5::super::bool; bool ------- True (1 row) SELECT 5.0::bool; ERROR: cannot cast type numeric to boolean SELECT 5.0::super::bool; bool ------- (1 row)
    • Amazon Redshift は、日付と時刻の型を SUPER データ型にキャストしません。Amazon Redshift では、次の例に示すように、SUPER データ型から日付と時刻のデータ型のみをキャストできます。

      SELECT o.o_orderdate FROM customer_orders_lineitem c,c.c_orders o; order_date ------------------ "2001-09-08" (1 row) SELECT JSON_TYPEOF(o.o_orderdate) FROM customer_orders_lineitem c,c.c_orders o; json_typeof ----------------- string (1 row) SELECT o.o_orderdate::date FROM customer_orders_lineitem c,c.c_orders o; order_date ---------------- 2001-09-08 (1 row) --date/time cannot be cast to super SELECT '2019-09-09'::date::super; ERROR: cannot cast type date to super
    • 非スカラー値 (オブジェクトと配列) から文字列にキャストすると、NULL が返されます。これらの非スカラー値を適切にシリアル化するには、それらをキャストしないでください。代わりに、json_serialize を使用して非スカラー値をキャストします。json_serialize 関数は varchar を返します。次の最初の例に示すように、Amazon Redshift は暗黙的にシリアル化されるため、通常、非スカラー値を varchar にキャストする必要はありません。

      SELECT r_nations FROM region_nations WHERE r_regionkey=300; r_nations ---------------- [1,"abc",null] (1 row) SELECT r_nations::varchar FROM region_nations WHERE r_regionkey=300; r_nations ------------- (1 row) SELECT JSON_SERIALIZE(r_nations) FROM region_nations WHERE r_regionkey=300; json_serialize ----------------- [1,"abc",null] (1 row)
    • 大文字と小文字を区別しないデータベースの場合、Amazon Redshift は SUPER データ型をサポートしません。大文字と小文字を区別しない列の場合、Amazon Redshift はそれらを SUPER 型にキャストしません。したがって、Amazon Redshift では、大文字と小文字が区別されずキャストをトリガーしている列との間で、やり取りを行う SUPER 列はサポートされません。

  • Amazon Redshift は、サブクエリで IN 関数の外部テーブルまたは左側 (LHS) を検出しないサブクエリでは、RANDOM ( ) や TIMEOFDAY ( ) などの揮発性関数をサポートしません。