Amazon Redshift の半構造化データ - Amazon Redshift

Amazon Redshift は、2025 年 11 月 1 日以降、新しい Python UDF の作成をサポートしなくなります。Python UDF を使用する場合は、その日付より前に UDF を作成してください。既存の Python UDF は引き続き通常どおり機能します。詳細については、ブログ記事を参照してください。

Amazon Redshift の半構造化データ

Amazon Redshift で半構造化データのサポートを使用することにより、半構造化データを取り込んで Amazon Redshift データウェアハウスに保存できます。Amazon Redshift は、SUPER データ型と PartiQL 言語を使用して、データウェアハウス機能を拡張し、SQL データソースと NoSQL データソースの両方と統合します。このようにして、Amazon Redshift は JSON などのリレーショナルおよび半構造化された保存データの効率的な分析を可能にします。Amazon Redshift と PartiQL の統合の詳細については、「PartiQL – Amazon Redshift用の SQL 互換クエリ言語」を参照してください。

Amazon Redshift には、SUPER データ型と Amazon Redshift Spectrum という 2 つの形式の半構造化データサポートが用意されています。

Amazon Redshift に取り込んで SUPER データ型に保存するか、Amazon Redshift Spectrum を使用して Amazon S3 に保存されているデータをクエリすることで、半構造化データをクエリできます。

半構造化データを使用するためのベストプラクティス

半構造化データを使用する場合は、次のベストプラクティスを考慮してください。

  • SUPER データを使用する場合は、enable_case_sensitive_super_attribute および enable_case_sensitive_identifier 設定オプションを true に設定することをお勧めします。詳細については、「enable_case_sensitive_super_attribute」および「enable_case_sensitive_identifier」を参照してください。

  • COPY コマンドを使用して、Amazon S3 バケットから Amazon Redshift SUPER 列にデータをロードします。

  • PartiQL 動的型付けおよび lax セマンティクスを使用して、クエリを実行する前にスキーマを強制することなく、SUPER データ値に対してアドホッククエリを実行します。動的型付けの詳細については、「動的型付け」を参照してください。lax セマンティクスの詳細については、「Lax のセマンティクス」を参照してください。

  • データを頻繁にクエリする場合は、PartiQL を使用してスキーマレスおよび半構造化データをマテリアライズドビューにシュレッダー処理します。細分化されたデータに対して分析を実行すると、Amazon Redshift マテリアライズドビューの列構造により、パフォーマンスが向上します。さらに、取り込まれたデータに対して従来のスキーマを必要とするユーザーおよびビジネスインテリジェンス (BI) ツールは、データの従来のスキーマ表示としてビュー (マテリアライズドまたは仮想) を使用できます。

    PartiQL マテリアライズドビューが、JSON または SUPER で見つかったデータを従来の列指向マテリアライズドビューに抽出した後、マテリアライズドビューにクエリを実行できます。マテリアライズドビューの詳細については、「Amazon Redshift でのマテリアライズドビュー」を参照してください。SUPER データ型とマテリアライズドビューの詳しい仕組みについては、「SUPER データ型とマテリアライズドビュー」を参照してください。

SUPER データ型の使用概念

以下に、Amazon Redshift SUPER データ型の概念をいくつか示します。

Amazon Redshift での SUPER データ型を理解するSUPER データ型は Amazon Redshift データ型であり、Amazon Redshift スカラーや、場合によってはネストされた配列や構造体を含むスキーマレス配列や構造体を保存できます。SUPER データ型は、JSON やドキュメント指向のソースから発信されたデータなど、さまざまな形式の半構造化データをネイティブに保存できます。新しい SUPER 列を追加して、半構造化データを保存し、通常のスカラー列とともに SUPER 列にアクセスするクエリを書き込むことができます。SUPER データ型の詳細については、SUPER タイプを参照してください。

スキーマレス JSON を SUPER に取り込む – 柔軟な半構造化 SUPER データ型を使用すると、Amazon Redshift はスキーマレス JSON を受信して SUPER データ型の列に取り込むことができます。例えば、COPY コマンドを使用して JSON 値 [10.5, “first”] を SUPER データ型の列に取り込むことができます。列には SUPER 値 [10.5, ‘first’] が保持されます。JSON_PARSE 関数 を使用して JSON を取り込むこともできます。デフォルトでは、COPY と json_parse のどちらも、厳密な解析セマンティクスを使用して JSON を取り込みます。また、データベースデータ自体を使用して、配列や構造体を含む SUPER 値を構築することもできます。

SUPER 列は、スキーマレス JSON の柔軟な構造を取り込むときに、スキーマを変更する必要はありません。例えば、クリックストリームを分析するときに、最初に「IP」と「時間」属性を持つ「クリック」構造を SUPER 列に保存します。このような変更を取り込むために、スキーマを変更せずに属性「customer id」を追加できます。

SUPER データ型に使用されるネイティブ形式は、テキスト形式の JSON 値よりも少ないスペースを必要とするバイナリ形式です。これにより、クエリでの SUPER 値の取り込みと実行時の処理が高速になります。

PartiQL を使用して SUPER データをクエリする – PartiQL は、SQL-92 の拡張機能として下位互換性を持ち、現在多くの AWS サービスにより使用されています。PartiQL を使用すると、使い慣れた SQL 構造は、従来の表形式の SQL データと SUPER の半構造化データの両方へのアクセスがシームレスに組み合わされます。オブジェクトおよび配列のナビゲーションを実行し、配列のネストを解除できます。PartiQL は、標準の SQL 言語を拡張して、ネストされた複数値を持つデータを宣言的に表現し、処理します。

PartiQL は、SQL の拡張であり、SUPER 列のネストされたスキーマレスデータは第一級市民です。PartiQL では、クエリのコンパイル時にすべてのクエリ式を型チェックする必要はありません。この方法は、SUPER 列内の実際のデータ型にアクセスしたときに、クエリの実行中に動的に型付けされる SUPER データ型を含むクエリ式を有効にします。また、PartiQL は lax モードで動作します。このモードでは、型の不整合によって障害が発生することはありませんが、null が返されます。スキーマレスクエリと lax クエリ処理の組み合わせにより、PartiQL は、SQL クエリが SUPER 列に取り込まれる JSON データを評価する抽出、ロード、変換 (ELT) アプリケーションに最適です。

Amazon Redshift の PartiQL の詳細については、「PartiQL – Amazon Redshift用の SQL 互換クエリ言語」を参照してください。動的型付けの詳細については、「動的型付け」を参照してください。lax クエリ処理の詳細については、「Lax のセマンティクス」を参照してください。

Redshift Spectrum との統合 – Amazon Redshift は、JSON、Parquet、およびネストされたデータを持つその他の形式で Redshift Spectrum クエリを実行するときに、PartiQL の複数の側面をサポートします。Redshift Spectrum は、スキーマを持つネストされたデータのみをサポートします。例えば、Redshift Spectrum では、JSON データのスキーマ ARRAY<STRUCT<a:INTEGER, b:DECIMAL(5,2)>>nested_schemaful_example 属性があることを宣言できます。この属性のスキーマは、データに常に配列が含まれていることを決定します。配列には、整数 a と小数 b の構造が含まれています。より多くの属性を含むようにデータが変更されると、タイプも変更されます。対照的に、SUPER データ型にはスキーマは必要ありません。異なる属性または型を持つ構造体要素を持つ配列を保存することができます。また、値は配列の外側に保存することができます。

SUPER 型データを使用する際の考慮事項

SUPER データを使用する際、以下の点を考慮してください。

SUPER 設定の詳細については、「SUPER 設定」を参照してください。