OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

階層的なパーティション管理(Vertica9.0新機能)

公開日:
更新日:
基本操作
チューニング
新バージョン/機能
#パーティショニング

はじめに

パーティション機能を利用すると、不要なデータへのアクセスを削減できパフォーマンスを向上できます。
しかし、これまでのパーティション機能は、テーブルの全データに対して、一定単位でしかパーティションを設定することができませんでした。そのため、粒度の細かいパーティションを設定すると、パーティション数の制限(1024)に抵触してしまう、という課題がありました。

この課題の解決策として、Vertica9.0より、階層パーティション機能が実装されました。
階層パーティション機能では、利用頻度の高いデータについては細かい粒度で、利用頻度の低いデータについては粒度の粗いパーティションを設定できます。

これらの特徴により階層パーティション機能を利用することで、以下の効果を期待することができます。
 利用頻度の高いデータ:パフォーマンスの向上
 利用頻度の低いデータ:パーティション数の制限に抵触せずデータを長期間保持

<階層パーティションのイメージ図>

本記事では、階層的パーティション機能の利用例をご紹介します。

階層パーティションの設定方法

階層パーティションはCALENDAR_HIERARCHY_DAY関数で設定できます
※CALENDAR_HIERARCHY_DAY関数はGROUP BY句内で使用する必要があります

/*** 構文 ***/
CALENDAR_HIERARCHY_DAY( partition‑expression[, active‑months[, active‑years] ] )

partition‑expression:パーティション化する列名
active‑months:日ごとのパーティションが有効な月数(デフォルト:2)
active‑years:月ごとのパーティションが有効な年数(デフォルト:2)

実行例

sales_factのテーブルデータを直近3ヶ月は日単位、それ以前の直近2年間は月単位、過去2年以前は年単位でパーティション化する例を以下に記載します。

sales_factテーブルのsales_data
dbadmin=> ALTER TABLE sales_fact PARTITION BY sales_date
dbadmin-> GROUP BY (CALENDAR_HIERARCHY_DAY(sales_date, 3));
ALTER TABLE

変更内容を適用するために、再編成を実施するコマンドも併せて実行します。
dbadmin=> ALTER TABLE public.sales_fact REORGANIZE;
NOTICE 4785:  Started background repartition table task
ALTER TABLE

パーティションの設定を確認します。
直近3ヶ月(2017年の12月、11月、10月)については、日毎にパーティションされていて、それ以前の直近2年間は月単位、過去2年以前は年単位でパーティション化されていることが確認できます。

dbadmin=> SELECT DUMP_TABLE_PARTITION_KEYS('sales_fact');   Storage [ROS container]
~中略~
 Partition keys on node v_testdb_node0001
  Projection 'sales_fact_b0'
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-12-16
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-12-13
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-12-10
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-12-06
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-12-03
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-29
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-26
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-12
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-05
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-04
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-11-03
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-10-15
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-10-10
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-10-06
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-10-05
   Storage [ROS container]
     No of partition keys: 1
     Partition keys: 2017-10-04
   Storage [ROS container]
     No of partition keys: 6
     Partition keys: 2017-09-01 2017-09-02 2017-09-16 2017-09-23 2017-09-26 2017-09-30
~中略~
   Storage [ROS container]
     No of partition keys: 45
     Partition keys: 2015-01-03 2015-01-05 2015-01-06 2015-01-23 2015-01-26 2015-02-01 2015-02-22 2015-02-24 2015-03-18 2015-03-23 2015-03-26 2015-04-01 2015-04-27 2015-04-28 2015-05-03 2015-05-05 2015-05-09 2015-05-22 2015-05-27 2015-05-29 2015-06-04 2015-06-05 2015-06-13 2015-07-06 2015-07-15 2015-07-16 2015-07-20 2015-07-22 2015-08-11 2015-08-27 2015-08-31 2015-09-17 2015-09-22 2015-10-02 2015-10-05 2015-10-09 2015-10-12 2015-11-08 2015-11-16 2015-12-01 2015-12-02 2015-12-15 2015-12-16 2015-12-23 2015-12-30
~以下略~

<上記例のイメージ図>

参考情報

Hierarchical Partitioning
https://my.vertica.com/docs/9.0.x/HTML/index.htm#Authoring/AdministratorsGuide/Partitions/HierarchicalPartitioning.htm

パーティショニングの概要
https://www.ashisuto.co.jp/cm/analytics-database/partition_overview.html

検証バージョンについて

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

更新履歴

2022/07/20 「Verticaの主な制限事項」のリンクを削除
2017/12/22 本記事を公開