はじめに
パーティション機能を利用すると、不要なデータへのアクセスを削減できパフォーマンスを向上できます。しかし、これまでのパーティション機能は、テーブルの全データに対して、一定単位でしかパーティションを設定することができませんでした。そのため、粒度の細かいパーティションを設定すると、パーティション数の制限(1024)に抵触してしまう、という課題がありました。
この課題の解決策として、Vertica9.0より、階層パーティション機能が実装されました。
階層パーティション機能では、利用頻度の高いデータについては細かい粒度で、利用頻度の低いデータについては粒度の粗いパーティションを設定できます。
これらの特徴により階層パーティション機能を利用することで、以下の効果を期待することができます。
利用頻度の高いデータ:パフォーマンスの向上
利用頻度の低いデータ:パーティション数の制限に抵触せずデータを長期間保持
<階層パーティションのイメージ図>
本記事では、階層的パーティション機能の利用例をご紹介します。
階層パーティションの設定方法
階層パーティションはCALENDAR_HIERARCHY_DAY関数で設定できます※CALENDAR_HIERARCHY_DAY関数はGROUP BY句内で使用する必要があります
1 2 3 4 5 6 |
/*** 構文 ***/ CALENDAR_HIERARCHY_DAY( partition‑expression[, active‑months[, active‑years] ] ) partition‑expression:パーティション化する列名 active‑months:日ごとのパーティションが有効な月数(デフォルト:2) active‑years:月ごとのパーティションが有効な年数(デフォルト:2) |
実行例
sales_factのテーブルデータを直近3ヶ月は日単位、それ以前の直近2年間は月単位、過去2年以前は年単位でパーティション化する例を以下に記載します。
1 2 3 4 5 6 7 8 9 |
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年以前は年単位でパーティション化されていることが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
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 Partitioninghttps://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で確認しています。更新履歴
2022/07/20 「Verticaの主な制限事項」のリンクを削除2017/12/22 本記事を公開