パーティショニングとは
テーブルを、指定した単位(一般的には「年」などの時間)で分割することをパーティショニングといいます。
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で確認しています。
