はじめに

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

パーティションの制限事項につきましては、以下の記事をご参照ください。
Verticaの主な制限事項
http://vertica-tech.ashisuto.co.jp/vertica-limits_7-2_or_later/

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

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

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



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

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

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



実行例

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



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


<上記例のイメージ図>

参考情報

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


パーティショニングの概要
http://vertica-tech.ashisuto.co.jp/partition_overview/

検証バージョンについて

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