OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

パーティショニングの概要

公開日:
更新日:
アーキテクチャ
#パーティショニング

パーティショニングとは

テーブルを、指定した単位(一般的には「年」などの時間)で分割することをパーティショニングといいます。
Verticaのパーティションはテーブル単位で列に対して定義します。パーティションを定義するとWHERE句を使用した検索の際に不要なパーティションはアクセス対象から除外されるため、パフォーマンスの向上が見込めます。

また、不要になったパーティションを一括で高速に削除(DROP PARTITION)できるといったメリットもあります。

例) 年(year)でパーティショニングを実施する場合のイメージ

パーティショニングの概要

なお、最適化されたプロジェクションでパーティショニングを実施した場合は、各パーティション単位で最適化(ソート、圧縮)が行われます。

パーティショニングの設定方法

パーティショニングはCREATE TABLE時に、PARTITION BY EXTRACT(パーティション単位 FROM 列名)で定義できます。

例) table1_partテーブルに対して日付列(date型)のyear(年)でパーティショニングを行う場合

CREATE TABLE table1_part
(
日付 date not null,
顧客ID int,
店舗 varchar(10),
エリア varchar(10),
売上高 int
)
PARTITION BY EXTRACT(year FROM 日付);

パーティショニングの確認方法

定義したパーティションの情報はpartitionsテーブルで確認できます。

例)table1テーブルに2013~2015年のデータが入っている場合

dbadmin=> SELECT PARTITION_KEY,PROJECTION_NAME,ROS_SIZE_BYTES,ROS_ROW_COUNT,NODE_NAME 
dbadmin-> FROM partitions ORDER BY partition_key;
 PARTITION_KEY |  PROJECTION_NAME  | ROS_SIZE_BYTES | ROS_ROW_COUNT |    NODE_NAME
---------------+-------------------+----------------+---------------+-----------------
 2013          | table1_part_super |            161 |             3 | v_test_node0001
 2014          | table1_part_super |            157 |             3 | v_test_node0001
 2015          | table1_part_super |            174 |             3 | v_test_node0001
(3 rows)

[partitions]

列名

内容

PARTITION_KEY

パーティションのキーとなる値

PROJECTION_NAME

プロジェクション名

ROS_SIZE_BYTES

ROS(ディスク)に格納されているデータサイズ

ROS_ROW_COUNT

ROS(ディスク)に格納されているデータ件数

NODE_NAME

ノード名

参考情報

階層的なパーティション管理(Vertica9.0新機能)
https://www.ashisuto.co.jp/cm/analytics-database/hierarchical_partitioning.html

検証バージョンについて

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