はじめに
Verticaの大きな特徴であるプロジェクションの概要は、こちらの記事でご紹介しました。本稿では、ライブアグリゲートプロジェクションについて、詳しく解説します。
ライブアグリゲートプロジェクションとは
ライブアグリゲートプロジェクションを使用すると、集計処理を行った後の結果セットをプロジェクションとして保持できます。この場合、プロジェクション作成時に指定したSQLが発行されると、Verticaは実際には集計処理を行わず、ライブアグリゲートプロジェクションを参照するため、集計処理にかかるオーバーヘッドをなくすことができます。また、データがロードされるとライブアグリゲートプロジェクションの内容も最新の結果セットに更新されるため、常に最新の結果を得ることができます。[イメージ図]
制限事項
ライブアグリゲートプロジェクションを利用する場合は、以下の点にご注意ください。
・サポートされている関数は SUM、MAX、MIN、COUNTです。
・参照しているテーブルのロード方式が DIRECTの場合は、テーブルに対しての DML(*)は高速です。
・参照しているテーブルに対して、MERGEを実行する場合は、オプティマイズされている必要があります。
・複数のテーブルは指定できません。テーブルは1つのみを指定できます。
・テーブルの全カラムが含まれている場合であっても、スーパープロジェクションとして扱われません。
・ライブアグリゲートプロジェクションで指定されている、テーブルのカラム削除や変更はできません。実行するためには、ライブアグリゲートプロジェクションを削除する必要があります。
(*)9.2以前はテーブルに対して、DELETE、UPDATE、MERGEは実行できませんでした(COPY、INSERTは可能です)。9.3以降は DELETE、UPDATE、MERGEが実行できるようになりました。
・参照しているテーブルのロード方式が DIRECTの場合は、テーブルに対しての DML(*)は高速です。
・参照しているテーブルに対して、MERGEを実行する場合は、オプティマイズされている必要があります。
・複数のテーブルは指定できません。テーブルは1つのみを指定できます。
・テーブルの全カラムが含まれている場合であっても、スーパープロジェクションとして扱われません。
・ライブアグリゲートプロジェクションで指定されている、テーブルのカラム削除や変更はできません。実行するためには、ライブアグリゲートプロジェクションを削除する必要があります。
(*)9.2以前はテーブルに対して、DELETE、UPDATE、MERGEは実行できませんでした(COPY、INSERTは可能です)。9.3以降は DELETE、UPDATE、MERGEが実行できるようになりました。
ライブアグリゲートプロジェクションの作成方法
ライブアグリゲートプロジェクションはDatabase Designerを使って自動で作成することはできないため、手動でCREATE PROJECTION文を作成、実行します。[構文]
CREATE PROJECTION [ IF NOT EXISTS ] [[database.]schema.]projection
…[ (
……..{ projection-col | grouped-clause
……… [ ENCODING encoding-type ]
……… [ ACCESSRANK integer ]
……..} [,…]
…) ]
AS SELECT {table-col | expr-with-table-cols }[,…] FROM [[database.]schema.]table [ [AS] alias]
… GROUP BY column-expr
… [ KSAFE [ k-num ] ]
…[ (
……..{ projection-col | grouped-clause
……… [ ENCODING encoding-type ]
……… [ ACCESSRANK integer ]
……..} [,…]
…) ]
AS SELECT {table-col | expr-with-table-cols }[,…] FROM [[database.]schema.]table [ [AS] alias]
… GROUP BY column-expr
… [ KSAFE [ k-num ] ]
[パラメータ]
項目 | 説明 |
---|---|
IF NOT EXISTS | 指定された名前でオブジェクトが既に存在する場合はメッセージを出力します。 このオプションを省略してオブジェクトが存在する場合、ROLLBACKエラーメッセージを返します。 どちらの場合も、オブジェクトは作成されません。 オブジェクトが存在しない場合は作成し、存在する場合は既存のオブジェクトを利用する、SQLスクリプトを作成する場合に役立ちます。 関連情報はON_ERROR_STOPを参照してください。 |
[database.]schema | プロジェクションとテーブルが含まれるスキーマ名を指定します。データベース名を指定する場合は、現在起動中のデータベースを指定します。 |
projection | 作成するプロジェクション名を指定します。プロジェクション名は、同じスキーマ内のシーケンス、テーブル、プロジェクション、ビュー、モデルの中で一意の必要があります。 |
projection‑col | プロジェクションの列名を指定します。 指定しない場合、SELECT文の中で指定したテーブルに含まれる列名を使用します。 |
grouped‑clause | GROUPED句を参照してください。 |
ENCODING encoding‑type | 列のエンコードタイプを指定します。デフォルトはAUTOに設定されます。 |
ACCESSRANK integer | 列のデフォルトのアクセスランクを上書きします。 このパラメータは、Verticaが列にアクセスする速度を調整します。 詳細は「デフォルトの列ランキングの上書き」を参照してください。 |
table‑col expr‑with‑table‑cols | プロジェクションに含めるテーブルの列名または式を指定します。 指定する場合は、プロジェクションとテーブルの列名と式の指定順は、完全に一致している必要があります。 |
FROM table [ [AS] ALIAS] | プロジェクションで利用するテーブルを指定します。エイリアスで修飾することもできます。 |
GROUP BY column‑expr[,…] | SELECTリストの中から、1つ以上の列名を指定します。 最初のcolumn-exprはSELECTリストの最初の列名、2番目のcolumn-exprはSELECTリストの2番目の列名を指定します。 |
KSAFE [ k‑num ] | プロジェクションのK-Safetyを指定します。k-numはシステムのK-Safety以上である必要があります。 プロジェクションがセグメント化されていない場合は、このパラメータは無視されます。 k-numを省略すると、VerticaはシステムのK-Safetyを使用します。 詳細はK-Safetyを参照してください。 |
[作成例]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
dbadmin=> CREATE PROJECTION la_pro_table1 dbadmin-> ( dbadmin(> エリア ENCODING AUTO, #クエリの実行に必要な列のみを指定 dbadmin(> 売上高合計 ENCODING AUTO #圧縮タイプはAUTOを指定 dbadmin(> ) dbadmin-> AS dbadmin-> SELECT エリア,SUM(売上高) AS #プロジェクションの作成に必要なSQLを指定 dbadmin-> 売上高合計 FROM table1 dbadmin-> GROUP BY エリア; WARNING 4468: Projection <public.la_pro_table1> is not available for query processing. Execute the select start_refresh() function to copy data into this projection. The projection must have a sufficient number of buddy projections and all nodes must be up before starting a refresh CREATE PROJECTION dbadmin=> select refresh('public.table1'); #プロジェクションの作成は実際にはREFRESH実行時に行われる refresh ---------------------------------------------------------------------------------------- Refresh completed with the following outcomes: Projection Name: [Anchor Table] [Status] [Refresh Method] [Error Count] [Duration (sec)] ---------------------------------------------------------------------------------------- "public"."la_pro_table1": [table1] [refreshed] [scratch] [0] [0] (1 row) |
参考情報
Live Aggregate Projectionshttps://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AnalyzingData/AggregatedData/LiveAggregateProjections.htm
CREATE PROJECTION (Live Aggregate Projections)
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Statements/CREATEPROJECTIONLiveAggregate.htm
検証バージョンについて
この記事の内容はVertica 9.3で確認しています。更新履歴
2019/12/08 バージョン9.3リリース対応2019/06/04 本記事を公開