サマリの管理

注釈

サマリは 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 モジュール を使用して定期更新スケジュールを設定できます。また、VDPDataLoad を作成する必要があるため、「 VDPDataLoad 抽出セクション 」でロードプロセスの構成方法を確認してください。

これとは別に、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 でテーブルを作成します。

  • Needs recreate: テーブルが存在するものの、サマリの定義と列スキーマが一致しません。最初の REFRESH で Virtual DataPort がテーブルを再作成します。

  • 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 ステートメントを使用します。