Amazon Redshift 半構造化データの取り込みとクエリ - Amazon Redshift

Amazon Redshift 半構造化データの取り込みとクエリ

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

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

低いレイテンシーで JSON データの小さなバッチを挿入または更新する必要がある場合は、SUPER データ型を使用します。また、クエリで強力な一貫性、予測可能なクエリパフォーマンス、複雑なクエリサポート、および進化するスキーマやスキーマレスデータの使いやすさが必要な場合にも SUPER を使用します。

これとは対照的に、他の AWS サービスとの統合や、アーカイブ目的で主に Amazon S3 に保存されているデータとの統合をデータクエリが必要とする場合は、オープンファイル形式で Amazon Redshift Spectrum を使用してください。

SUPER データ型のユースケース

Amazon Redshift の SUPER データ型を使用した半構造化データのサポートは、優れたパフォーマンス、柔軟性、使いやすさを提供します。以下に示すユースケースは、SUPER で半構造化データサポートを使用する方法を示します。

JSON データの迅速かつ柔軟な挿入 – Amazon Redshift は、JSON を解析して SUPER 値として保存できる迅速なトランザクションをサポートします。挿入トランザクションは、従来の列で SUPER の属性をシュレッダー処理したテーブルに同じ挿入を実行するよりも、最大 5 倍高速に動作することができます。例えば、受信 JSON の形式が {“a”:.., “b”:.., “c”“..., ...} であるとします。受信 JSON を列「a」、「b」、「c」などを持つ従来のテーブル TR に保存する代わりに、単一の SUPER 列 S を持つテーブル TJ に保存することで、挿入パフォーマンスを何度も加速できます。JSON に何百もの属性がある場合、SUPER データ型のパフォーマンス上の利点はかなりのものになります。

また、SUPER データ型には通常のスキーマは必要ありません。受信した JSON を保存する前に、確認してクリーンアップする必要はありません。例えば、受信 JSON に文字列「c」属性があり、その他の JSON には整数「c」属性があり、SUPER データ型がないとします。この場合、c_string 列と c_int 列を分離するか、データをクリーンアップする必要があります。これに対し、SUPER データ型では、すべての JSON データが取り込み中に情報を失うことなく保存されます。後で、SQL の PartiQL 拡張機能を使用して情報を分析できます。

検出のための柔軟なクエリ – 半構造化データ (JSON など) を SUPER データ値に保存した後、スキーマを課すことなくクエリを実行できます。PartiQL 動的型付けと lax セマンティクスを使用してクエリを実行し、深くネストされた必要なデータを検出できます。クエリの前にスキーマを課す必要はありません。

抽出、ロード、変換 (ETL) オペレーションで従来のマテリアライズドビューへの柔軟なクエリ – スキーマレスおよび半構造化データを SUPER に保存した後、PartiQL マテリアライズドビューを使用してデータを観察し、マテリアライズドビューでシュレッド処理を行えます。

細分化されたデータを含むマテリアライズドビューは、従来の分析ケースに対するパフォーマンスと使いやすさによる利点の良い例です。細分化されたデータに対して分析を実行すると、Amazon Redshift マテリアライズドビューの列構造により、パフォーマンスが向上します。さらに、取り込まれたデータに対して従来のスキーマを必要とするユーザーおよびビジネスインテリジェンス (BI) ツールは、データの従来のスキーマ表示としてビュー (マテリアライズドまたは仮想) を使用できます。

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

SUPER 型の列のパス上の scalar 値に動的データマスキングポリシーを適用できます。動的データマスキングの詳細については、「動的データマスキング」を参照してください。SUPER データ型での動的データマスキングの使用に関する詳細については、「SUPER データタイプパスでの動的データマスキングの使用」を参照してください (プレビュー)。

SUPER データ型の詳細については、「SUPER タイプ」を参照してください。

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 値に取り込むことができます。例えば、Amazon Redshift は JSON 値 [10.5, ‘first’] を SUPER 値 [10.5, 'first'] に取り込むことができます。これは、Amazon Redshift の 10 進数 10.5 と varchar 'first' を含む配列です。Amazon Redshift は、COPY コマンドまたは json_parse('[10.5, "first"]') などの JSON 解析関数を使用して、JSON を SUPER 値に取り込むことができます。デフォルトでは、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) アプリケーションに最適です。

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

SUPER データ型をサポートする関数の詳細については、以下を参照してください。

SUPER データに関する考慮事項

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

  • JDBC ドライバーのバージョン 1.2.50、ODBC ドライバーのバージョン 1.4.17 以降、および Amazon Redshift Python ドライバーのバージョン 2.0.872 以降を使用します。

    JDBC ドライバーの詳細については、「JDBC 接続の設定」を参照してください。

    ODBC ドライバーの詳細については、「ODBC 接続の設定」を参照してください。

  • SUPER サンプルデータセット の次のトピックで使用されているスキーマの例をご覧ください。

  • 次のトピックで使用されるすべての SQL コード例は、ダウンロード用に同じ S3 プレフィックスが付いています。これには、データ定義言語 (DDL) と COPY ステートメント、SUPER で動作する特定の TPC-H 変更クエリが含まれます。

    SQL ファイルを表示またはダウンロードするには、次のいずれかを実行します。

    • SUPER チュートリアル SQL ファイルTPC-H ファイルをダウンロードします。

    • Amazon S3 CLI を使用して、次のコマンドを実行します。独自のターゲットパスを使用できます。

      aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/semistructured-tutorial.sql /target/path aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/super_tpch_queries.sql /target/path

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