サマリーの管理

注釈

サマリーは Denodo Standard では使用できません。「 Denodo Standard の制限事項 」も参照してください。

ここでは、管理ツールを使用してサマリーを作成、編集、および削除する方法について説明します。

サマリーの作成

サマリーの作成方法には以下の 2 種類があります。

  1. 管理ツールのウィザードを使用する。

  2. CREATE SUMMARY VIEW コマンドを使用する。

ここでは、管理ツールでサマリーを作成する手順について説明します。以下の手順に従います。

  1. リモートテーブルの作成先とする JDBC データソースを右クリックして [Create Summary View] をクリックします。

    注釈

    この機能は、JDBC データソースの場合のみサポートされています。HDFS ベースのデータベース (Hive、Impala、Presto、Spark、Databricks) でこの機能を使用するには、まず データ一括読み込み を有効にする必要があります。

  2. 以下の情報を入力します。

    Create summary view

    サマリービューの作成

    [Definition] タブで以下の手順に従います。

    • Summary name: Virtual DataPort でのサマリーの名前を入力します。

    • Enabled for query rewrite: チェックすると、クエリを部分的に置き換える値としてオプティマイザーが保持している候補リストにサマリーが追加されます。クエリを部分的にサマリーで置き換えることができるかどうかは、このウィザードで指定する VQL クエリで決まります。

      注釈

      インポートオプションを使用してサマリーを作成しても、該当のテーブルがまだ存在しない場合、最初の更新が実行されるまでは、このプロパティに関係なく、クエリの高速化でサマリーは使用されません (「 環境間でのエクスポートとインポート 」を参照)。

    • Target data source: サマリーから値を挿入するテーブルの作成先として Virtual DataPort で使用するデータソースを選択します。

    • Insert options: 挿入処理を構成する一連のオプションパラメーター。空のままにしたフィールドではデフォルト値が使用されます。データソースの中には、これらのパラメーターのいくつかをサポートしていないものがあります。使用できる挿入オプションは以下のとおりです。

      • Batch insert size: バッチ挿入ごとのタプルの数。

      • Location: Virtual DataPort によるデータのアップロード先。この場所は、以下のようにデータソースに応じて異なります。

        • Hadoop データソース (Hive、Impala、Presto、Spark): HDFS URI

        • Redshift: S3 バケット名

        • Athena: S3 の場所

      • Parquet row group size: 行グループのサイズ (MB 単位)。このプロパティは、Virtual DataPort が Parquet ファイルを使用してデータを挿入するデータソース (Athena、Hive、Impala、Presto、Spark) のみで有効です。

    • Remote table: サマリーデータを収めた新しいテーブルの作成先として Virtual DataPort で使用するカタログとスキーマを選択し、この新しいテーブルの名前を指定します。エレメントのリモートテーブルと混同しないようにします。

      注釈

      これらの特殊テーブルの管理を容易にするために、それらに専用のスキーマを指定し、命名規則に従って名前を割り当てることが推奨されます。たとえば、これらのテーブル名には接頭辞として「s_」を付加します。

    • VQL Query: サマリーのマテリアライズに使用するクエリを入力します。このクエリは、別のクエリの実行プランを部分的にサマリーに置き換えることができるかどうかを判断するためにオプティマイザーで使用されます。サマリーを作成するとき、またはサマリーを更新するたびにこのクエリが実行され、その結果がリモートテーブルに挿入されます。

      また、[Server Explorer] からビューを [VQL Query] にドラッグして、そのビューに基づいてクエリを作成できるようにすることもできます。

      注釈

      ベストプラクティスとして、クエリ定義の SELECT 句ですべての列に別名を指定してください。作成時に指定したクエリの SELECT 句に別名を指定していない列があると、すべてのフィールドに別名が存在するように、Denodo によって内部的に別の SELECT 句が追加されます。この場合、サマリーを作成した後、VQL でクエリ定義を確認すると、元の SELECT 句のほかに別の SELECT 句が存在することがわかります。

    [Metadata] タブで以下の手順に従います。

    • Database: サマリーを保存する Virtual DataPort データベースを選択します。

    • Folder: データベースの中でサマリーを保存するフォルダー。

    • Description: サマリーの説明。

  3. [Save] をクリックします。

サマリーを作成するために、実行エンジンで以下の処理が実行されます。

  1. 選択されている JDBC データソースの基盤となるデータベースにテーブルを作成します。

  2. VQL クエリを実行します。

  3. このクエリの結果を、手順 1 で作成したデータベースのテーブルに挿入します。データソースでデータ一括読み込みがサポートされ、構成されていれば、データの一括読み込み API を使用して結果を挿入します。

  4. 手順 1 で作成したテーブルにリンクしたサマリービューを作成します。

必要な権限

サマリーを作成、編集、および削除できるのはサーバー管理者のみです。

JDBC データソースで設定されているユーザーアカウントは、基盤となるデータベースでテーブルを作成、置換、および削除できる必要があります。

要件

[Server Configuration] - [Queries Optimization] ダイアログで、以下のオプションが有効であることを確認します。

  • Data Movement: サマリーを作成します。無効である場合、サマリーの作成は失敗します。

  • Automatic simplification of queries: クエリでサマリーによる書き換えを使用します。

データの更新

クエリオプティマイザーでは、サマリーを使用できる場合、ユーザーから見て透過的な方法でサマリーが必ず使用されます。したがって、キャッシュビューの場合と同様に、それらのサマリーのデータが確実に最新であるようにすることが重要です。それを実現するために、 Denodo Scheduler モジュール を使用して定期更新のスケジュールを設定できます。VDP データソースを指定する必要があり、パラメーター化したクエリで以下のオプションのどちらかを使用できます。

  • REFRESH コマンドを使用して、すべてのデータを更新します。つまり、データが保存されているリモートテーブルのデータがすべて消去され、すべてのデータが再度挿入されます。

  • INSERT INTO <summary view> ( <SELECT 句> ) コマンドを使用して、既存のデータに新しい行を追加します。

これとは別に、VDP 管理ツールを使用して、グラフィカルな方法ですべてのデータを更新することもできます。そのためには、サマリーを開いて refresh_summary をクリックします。

実行エンジンで以下の処理が実行されます。

  1. 基盤となるデータベースから現在のテーブルを削除します。このテーブルのデータはすべて失われます。リモートテーブルが存在しない場合、Virtual DataPort サーバーでリモートテーブルを作成します。

  2. Virtual DataPort でデータ読み込みクエリを実行します。

  3. クエリの結果を、手順 1 で作成したデータベースのテーブルに挿入します。

環境間でのエクスポートとインポート

プロモート中などで、サマリーをエクスポートして新しい環境にインポートする場合、このサマリーが保存されるリモートテーブルが存在するかどうかが確認されます。このテーブルがまだ存在しない場合、実行エンジンはコマンド REFRESH が実行されるまでクエリ高速化にサマリーを使用しません。このコマンドでは、データを挿入する前に、必要に応じてテーブルが作成されます。

Solution Manager を使用して新しいリビジョンをプロモートしようとしていて、そのリビジョンに新しいサマリーが含まれている場合には、そのサマリーを読み込む Scheduler ジョブを含めることをお勧めします。[Revision elements] タブで、そのジョブを選択し、オプション [Execute job when revision is deployed] を選択します。これにより新しいサマリーが読み込まれ、プロモート後に使用できるようになります。

サマリーがクエリの書き換えに対して有効かどうかを確認するには、VDP Administration ツールを開いて、サマリーを開き、ビューのメインパネルにある [Valid for query rewrite] を確認します。

../../../../../_images/summary_promotion.png

以下のステータスがあります。

  • Valid: データベースにテーブルが存在し、クエリの書き換えにサマリーが考慮されます。

  • Needs refresh: テーブルが存在しません。Virtual DataPort が最初の REFRESH でテーブルを作成します。

  • Unknown: テーブルが存在するかどうかを確認できませんでした。実行エンジンは、このテーブルでコマンド REFRESH が実行されるまで、クエリの書き換えに時にこのサマリーを考慮しません。

このプロパティが Valid でない場合にオプティマイザーがサマリーを使用するように設定するには、パラメーター 'consider_all_summaries'='on' を CONTEXT 句クエリに追加します。たとえば、クエリの実行プランを見て、オプティマイザーがそのサマリーを使用するかどうかを確認したい場合などに、この設定を行います。

サマリーの編集

サマリーを編集するには、サマリーを開いて [Edit] タブをクリックします。

Edit summary

サマリーの編集

目的の変更を指定した後、[Save] をクリックします。VQL クエリまたはリモートテーブルに関連するフィールドのいずれかを変更した場合、実行エンジンで以下の処理が実行されます。

  1. 基盤となるデータベースから現在のテーブルを削除します。このテーブルのデータはすべて失われます。

  2. JDBC データソースの基盤となるデータベースにテーブルを作成します。

  3. Virtual DataPort でクエリを実行します。

  4. クエリの結果を、手順 2 で作成したデータベースのテーブルに挿入します。

  5. 古いテーブル内の既存のインデックスが新しいテーブル内に作成されます。VQL Query が変更され、インデックスが使用するフィールドが削除されている場合、影響を受けるこれらのインデックスは、新しいテーブル内に作成されません。

  6. 手順 2 で作成したテーブルにリンクしている新しいサマリーで既存のサマリーを置き換えます。

プログラムからサマリーを変更する場合は、 CREATE SUMMARY VIEW コマンドを使用します。

また、[Options] タブには、 インデックス統計情報 を構成するためのセクションがあります。

サマリーの削除

管理ツールでサマリーを削除する場合、基盤となるデータベースからテーブルを削除するかどうかの確認が求められます。テーブルが リモートテーブル の場合、以下のようなダイアログが表示されます。

Drop remote table and base view without dependencies

[Yes] をクリックすると、サマリーのほかに、基盤となるデータベースのテーブルが削除されます。

複数のサマリーとリモートテーブルを一度に削除する場合、それらのサマリーのうち、基盤となるリモートテーブルを削除するものを選択することが求められます。

サマリーをそのリモートテーブルとともにプログラムで削除するには、 DROP_REMOTE_TABLE ストアドプロシージャ を使用します。リモートテーブルを保持したままサマリーを Virtual DataPort から削除する場合は、 DROP VIEW ステートメントを使用します。