サマリ¶
Virtual DataPort では、クエリの結果を外部データベースのテーブルに格納することで、他のクエリを実行するときにスマートクエリアクセラレーションを使用できます。この機能を サマリ と呼びます。
クエリの実行プランを作成するときに、オプティマイザーは、サマリの作成に使用されるクエリと一致する部分を識別できます。可能な場合、これらの一致する部分はサマリへのアクセスに置き換えられます。適切に定義されたサマリを使用すると、クエリの実行パフォーマンスが大幅に向上します。
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 }]
[ DATA_LOAD_IMMEDIATE = { TRUE | FALSE }]
[ FOLDER = <literal> ]
[ DESCRIPTION = <literal> ]
[ <primary key> ]
[ QUERY REWRITE ENABLED = { TRUE | FALSE }]
[ CREATE_TABLE_TEMPLATE ( <template_definition:literal>
[ DEFAULT( <parameter definition> [, <parameter definition> ]* ) ] ) ]
[ 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)
<parameter definition> ::= '<parameter_name:literal>' = '<parameter_value:literal>'
<context information> ::= (see HELP SELECT)
OR REPLACE
: この句が存在し、かつサマリが存在する場合、サマリが再作成されます。この句が存在せず、かつサマリが存在する場合、コマンドは失敗します。data_source_name
: JDBC データソース。サマリはこのデータソースに格納されます。data_source_catalog
(オプション): サマリが格納されるデータソースのカタログの名前。data_source_schema
(オプション): サマリが格納されるデータソースのスキーマの名前。
注釈
data_source_catalog
と data_source_schema
はそれぞれオプションで指定できますが、少なくともどちらか 1 つは指定する必要があります。そうしないと、コマンドは失敗します。
table_name
(オプション): サマリの内容を挿入するためのデータソースのテーブルの名前。この句が存在しない場合、サマリの名前が使用されます。IF RELATION EXISTS { REPLACE | ERROR }
(オプション、デフォルトはERROR
): データソースにtable_name
という名前のテーブルがすでに存在する場合の動作を指定します。ERROR
を指定するとこのコマンドは失敗し、REPLACE
を指定するとテーブルが再作成されます。DATA_LOAD_IMMEDIATE
(オプション、デフォルトはTRUE
):TRUE
の場合、サマリ作成プロセスの一部としてサマリコンテンツがデータソースに保存されます。FALSE
の場合、サマリが作成されて、コンテンツは保存されません。また、オプティマイザーはこのサマリでクエリの一部を置き換えることはできません。コンテンツを読み込んで保存するには、REFRESH
コマンドを実行します。「 ビューの更新 」を参照してください。FOLDER
(オプション): このサマリが格納される Virtual DataPort 内のデータベースのフォルダ。DESCRIPTION
(オプション): Virtual DataPort 内のサマリの説明。primary key
(オプション): サマリのプライマリキーとなるフィールド。これらを指定する方法については、「 基本ビューの作成 」を参照してください。QUERY REWRITE ENABLED
(オプション、デフォルトはTRUE
):TRUE
の場合、サマリはオプティマイザーがクエリの一部を置き換えるための候補リストに含まれます。クエリの一部をサマリで置き換えることができるかどうかは、select_query
で指定されるクエリによって決定されます。CREATE_TABLE_TEMPLATE
(オプション): データソースにサマリテーブルを作成するために Denodo が使用するCREATE TABLE
コマンド。詳細については、「 テーブル作成テンプレート 」を参照してください。template_definition
: データソースにサマリテーブルを作成するために Denodo が使用する SQL テンプレートコマンド。@{parameter_name}
という構文のパラメータを含みます。DEFAULT
(オプション): テンプレートのユーザー定義パラメータの値を設定するために使用するプロパティ。オプションexport with properties
を使用してサマリビューをエクスポートした場合、これらのプロパティの値は環境プロパティファイルにエクスポートされます。詳細については、「 プロパティファイルへのエクスポート 」を参照してください。以下に例を示します。
CREATE SUMMARY VIEW <summary_name> INTO <data_source_name> ... CREATE_TABLE_TEMPLATE ( 'CREATE TABLE @{internal_parameter_table_name} (@{internal_parameter_columns} @{internal_parameter_restrictions}) IN ACCELERATOR @{accelerator}' DEFAULT('accelerator' = 'accel1') ) AS <select_query>
OPTIONS
: 挿入を設定するためのオプションのパラメータ。データソースの中には一部のパラメータをサポートしていないものがあります。使用できる挿入オプションは以下のとおりです。batch_insert_size
: 各バッチ挿入のタプルの数。location
: Virtual DataPort がデータをアップロードする場所。場所はデータソースに応じて変わります。Hadoop データソース (Hive、Impala、PrestoDB、Trino、Spark): HDFS URI。
Redshift: S3 バケット名
Athena: S3 の場所
parquet_row_group_size
: 行グループのサイズ (MB 単位)。プロパティは、Virtual DataPort が Parquet ファイルを使用してデータを挿入するデータソース (Athena、Hive、Impala、PrestoDB、Trino、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
を実行する場合は、[Limit displayed 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 date_dim.d_year, sum(store_sales.ss_net_profit) AS total_profit
FROM store_sales INNER JOIN date_dim ON date_dim.d_date_sk = store_sales.ss_sold_date_sk
GROUP BY date_dim.d_year;
このコマンドは以下の手順を実行します。
JDBC データソース
sqlserver_data_source
の基盤となるデータベースにmy_summary
というテーブルを作成します。VDP サーバーで以下のクエリを実行します。
SELECT date_dim.d_year, sum(store_sales.ss_net_profit) AS total_profit FROM store_sales INNER JOIN date_dim ON date_dim.d_date_sk = store_sales.ss_sold_date_sk GROUP BY date_dim.d_year
前のクエリの結果をテーブル
my_summary
に挿入します。Virtual DataPort で
my_summary
という名前の JDBC ラッパーを作成します。Virtual DataPort で
my_summary
という名前のサマリビューを作成します。このビューは、データにアクセスするために前の手順のラッパーを使用します。