サマリ

Virtual DataPort では、クエリの結果を外部データベースのテーブルに格納することで、他のクエリを実行するときにスマートクエリアクセラレーションを使用できます。この機能を サマリ と呼びます。

クエリの実行プランを作成するときに、オプティマイザーは、サマリの作成に使用されるクエリと一致する部分を識別できます。可能な場合、これらの一致する部分はサマリへのアクセスに置き換えられます。適切に定義されたサマリを使用すると、クエリの実行パフォーマンスが大幅に向上します。

CREATE SUMMARY VIEW コマンド

CREATE SUMMARY VIEW コマンドの構文は以下のとおりです。

構文

CREATE SUMMARY VIEW ステートメントの構文
CREATE [ OR REPLACE ] SUMMARY VIEW <summary_view_name:identifier>
    [ ID = <literal> ]
    INTO <data_source_name:identifier>
    [ CATALOG = <data_source_catalog:literal> ]
    [ SCHEMA = <data_source_schema:literal> ]
    [ RELATIONNAME = <table_name>:literal]
    [ IF RELATION EXISTS { REPLACE | ERROR }]
    [ FOLDER = <literal> ]
    [ DESCRIPTION = <literal> ]
    [ <primary key> ]
    [ QUERY REWRITE ENABLED = { TRUE | FALSE }]
    [ OPTIONS ( <option information> [ , <option information> ]* ) ]
    AS
    [ WITH <common table expressions> ]
    <select_query>
    [ <order by> ]
    [ OFFSET <number> [ ROW | ROWS ] ]
    [ {
          FETCH { FIRST | NEXT } [ <number> ] { ROW | ROWS } ONLY
        | LIMIT [ <number> ]
      }
    ]
    [ CONTEXT ( <context information> [ , <context information> ]* ) ]
    [ TRACE ]

<primary key> ::= (see HELP CREATE TABLE)

<option information> ::= (see HELP CREATE REMOTE TABLE)

<common table expressions> ::= (see HELP SELECT)

<select_query> ::= (see HELP SELECT)

<order by> ::= (see HELP SELECT)

<context information> ::= (see HELP SELECT)
  • OR REPLACE: この句が存在し、かつサマリが存在する場合、サマリが再作成されます。この句が存在せず、かつサマリが存在する場合、コマンドは失敗します。

  • data_source_name: JDBC データソース。サマリはこのデータソースに格納されます。

  • data_source_catalog (オプション): サマリが格納されるデータソースのカタログの名前。

  • data_source_schema (オプション): サマリが格納されるデータソースのスキーマの名前。

注釈

data_source_catalogdata_source_schema はそれぞれオプションで指定できますが、少なくともどちらか 1 つは指定する必要があります。そうしないと、コマンドは失敗します。

  • table_name (オプション): サマリの内容を挿入するためのデータソースのテーブルの名前。この句が存在しない場合、サマリの名前が使用されます。

  • IF RELATION EXISTS { REPLACE | ERROR } (オプション、デフォルトは ERROR): データソースに table_name という名前のテーブルがすでに存在する場合の動作を指定します。 ERROR を指定するとこのコマンドは失敗し、 REPLACE を指定するとテーブルが再作成されます。

  • FOLDER (オプション): このサマリが格納される Virtual DataPort 内のデータベースのフォルダー。

  • DESCRIPTION (オプション): Virtual DataPort 内のサマリの説明。

  • primary key (オプション): サマリのプライマリキーとなるフィールド。これらを指定する方法については、「 基本ビューの作成 」を参照してください。

  • QUERY REWRITE ENABLED (オプション、デフォルトは TRUE): TRUE の場合、サマリはオプティマイザーがクエリの一部を置き換えるための候補リストに含まれます。クエリの一部をサマリで置き換えることができるかどうかは、 select_query で指定されるクエリによって決定されます。

  • OPTIONS: 挿入を設定するためのオプションのパラメーター。データソースの中には一部のパラメーターをサポートしていないものがあります。使用できる挿入オプションは以下のとおりです。

    • batch_insert_size: 各バッチ挿入のタプルの数。

    • location: Virtual DataPort がデータをアップロードする場所。場所はデータソースに応じて変わります。

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

      • Redshift: S3 バケット名

      • Athena: S3 の場所

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

注釈

以下のコマンドを使用して parquet_row_group_size のデフォルト値を設定します。

SET 'com.denodo.vdb.util.tablemanagement.sql.insertion.HdfsInsertWorker.parquet.rowGroupSize' = '<value>';

この変更を適用するために Virtual DataPort サーバーを再起動する必要はありません。

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

重要

VQL シェルから CREATE SUMMARY VIEW を実行する場合は、[Retrieve all rows] チェックボックスをオンにします。オンにしない場合、実行エンジンは VQL シェルの [Display rows] ボックスで設定された行数のみを挿入します。

注意

このコマンドは、JDBC データソースに対してのみ機能します。

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

フィールド名の 1 つがデータソース内で予約されている単語である場合、Virtual DataPort はフィールド名を 'field_0' に変更します。他のフィールド名も予約されている場合は、'field_1'、'field_2' というように名前が変更されます。

このコマンドは、サマリの内容をデータソースに格納するために CREATE REMOTE TABLE コマンド を使用します。そのため、同コマンドでのデータソースの構成に関する具体的な特記事項はこのコマンドでも適用されます。

必要な権限

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

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

CREATE OR REPLACE SUMMARY VIEW my_summary
INTO sqlserver_data_source
CATALOG = 'master'
SCHEMA = 'dbo'
AS SELECT * FROM vdp_view WHERE id > 100;

このコマンドは以下の手順を実行します。

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

  2. VDP サーバーで以下のクエリを実行します。

    SELECT *
    FROM vdp_view
    WHERE id > 100;
    
  3. 前のクエリの結果をテーブル my_summary に挿入します。

  4. Virtual DataPort で my_summary という名前の JDBC ラッパーを作成します。

  5. Virtual DataPort で my_summary という名前のサマリビューを作成します。このビューは、データにアクセスするために前の手順のラッパーを使用します。