パーティショニングとは
テーブルを、指定した単位(一般的には「年」などの時間)で分割することをパーティショニングといいます。Verticaのパーティションはテーブル単位で列に対して定義します。パーティションを定義するとWHERE句を使用した検索の際に不要なパーティションはアクセス対象から除外されるため、パフォーマンスの向上が見込めます。
また、不要になったパーティションを一括で高速に削除(DROP PARTITION)できるといったメリットもあります。
例) 年(year)でパーティショニングを実施する場合のイメージ
なお、最適化されたプロジェクションでパーティショニングを実施した場合は、各パーティション単位で最適化(ソート、圧縮)が行われます。
パーティショニングの設定方法
パーティショニングはCREATE TABLE時に、PARTITION BY EXTRACT(パーティション単位 FROM 列名)で定義できます。例) table1_partテーブルに対して日付列(date型)のyear(年)でパーティショニングを行う場合
1 2 3 4 5 6 7 8 9 |
CREATE TABLE table1_part ( 日付 date not null, 顧客ID int, 店舗 varchar(10), エリア varchar(10), 売上高 int ) PARTITION BY EXTRACT(year FROM 日付); |
パーティショニングの確認方法
定義したパーティションの情報はpartitionsテーブルで確認できます。例)table1テーブルに2013~2015年のデータが入っている場合
1 2 3 4 5 6 7 8 |
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新機能)
http://vertica-tech.ashisuto.co.jp/hierarchical_partitioning/