はじめに

Verticaは、テーブルやビューなど、一般的なオブジェクト以外にも、様々なオブジェクトを利用できます。他のデータベースと大きく違うところは、プロジェクションという、Vertica独自のオブジェクトが存在することです。今回は、Verticaを構成しているオブジェクトには、どのようなものがあるか、ご紹介します。

Verticaのオブジェクト構造

Verticaのオブジェクトは、図に示すような構造になっています。


以下、Verticaで利用できるオブジェクトとその特徴について解説します。
No名称説明
1データベース一番大きなオブジェクトの単位です。データベースは複数作成することもできますが、起動できるデータベースはクラスタ全体で1つのみです。
2スキーマテーブル等を管理する単位です。スキーマを複数作成することで、ユーザーごとに参照できるスキーマを限定してセキュリティレベルを高めたり、アプリケーションごとにスキーマを分けて管理することができます。
3テーブルVerticaのテーブルは、実際にはデータを保持していない論理スキーマです。SQLがテーブルに対して発行された場合は、オプティマイザが対応するプロジェクションにアクセスし、データの検索等を行います。
4ビューテーブルの特定のカラムや指定した条件に合致するレコードなどを取り出した仮想のテーブルです。ユーザーに必要最小限のカラムやレコードのみにアクセスさせる事ができたり、結合条件を指定しなくても既に結合された表にアクセスすることができます。Verticaのビューは、読み取り専用のみで、更新可能なビューはありません。
5プロジェクションVertica独自のオブジェクトです。自動でテーブルデータを最適な形でソート、圧縮して保持しており、Verticaの検索パフォーマンスを向上させます。1つのプロジェクションには1つのテーブルの全列(あるいは特定の列)のデータが格納されています。
6外部プロシージャ1つのSQL文では記述することができない複雑な処理を実装することができます。
外部プロシージャーは、コーディング自体はシェルで行い、そのシェルを呼出して利用します。
7ユーザー定義関数事前に定義されている関数以外で、独自に関数を作成する場合に利用します。
8ライブラリユーザー定義関数で利用するライブラリです。ライブラリを作成する時に利用できるプログラミング言語は「C++/Java/R」です。
9シーケンスレコードに一意の番号を振りたい場合、その番号を自動生成してくれます。
10ストアドプロシージャ1つのSQL文では記述することができない複雑な処理をVertica内で実装することができます。
外部プロシージャとは違って、シェルを呼出す必要はありません。
※Vertica 11.1以降のバージョンで使用出来ます。
11リソースプール各処理で利用可能なメモリサイズやCPUの優先度を設定することができ、クエリの同時実行や優先順位を制御することができます。
12ユーザーデータベースで利用するユーザーです。ユーザーを作成することで、ユーザーごとに参照可能なスキーマやテーブルを分けたり、特定のユーザーにのみシステムのリソースを優先的に割り当てたりすることができます。データベース作成時には、スーパーユーザーとしてdbadminユーザーが自動的に作成されます。
13プロファイルユーザーに対して、パスワードの制限をかけるために利用します。パスワードで利用可能な文字や有効期間などのルールを指定することができます。
14ロール権限を纏めて一つにしたものです。権限のルールを見直す際などは、ロールを変更するだけでそのロールが割り当てられている全ユーザーに変更が反映されるため、管理がしやすくなります。
15ストレージロケーション新しく追加したディスクをVerticaのデータ領域や一時領域として使わせる場合やユーザー単位に特定のディレクトリに対して、読み取り/書き込みの制限を指定する場合に利用します。

参考情報

データベースオブジェクトの概要
http://vertica-tech.ashisuto.co.jp/dbobjects_overview/

Verticaのオブジェクト階層
http://vertica-tech.ashisuto.co.jp/object-hierarchy/

検証バージョンについて

この記事の内容はVertica 12.0で確認しています。

更新履歴

2022/09/27 ストアドプロシージャに関する記述を追加
2016/04/09 本記事を公開