はじめに

この記事では日付データを年度単位でパーティショニングする方法をご紹介します。

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

手順

通常、年単位でパーティショニングをすると、1月から12月までの範囲になります。業務要件で4月から翌年3月までを単位として年度でパーティショニングしたい場合には、以下2つの方法で設定することが可能です。
方法1. ALTER TABLE文によるパーティション定義の実装
方法2. ファンクションによるパーティション定義の実装
それぞれの手順をご紹介します。

方法1. ALTER TABLE文でパーティション定義

ALTER TABLE文を利用するとpartition byのあとに条件句を入れることが可能です。ここでCASE文を組み合わせることで「4月から翌年3月までを単位とした年度」など、任意の期間をパーティションの単位とすることができます。

(1)テーブル作成

(2)ALTER TABLE文でパーティション定義を実装
以下のようにCASE文を定義することで、4月以降と4月より前の月(1~3月)の年を分け、年度単位でパーティショニングされます。

(3)テストデータ挿入
以下のデータを挿入します。
2014年度 1件
2015年度 2件
2016年度 2件
2017年度 1件

(4)データの確認

(5)パーティション状況を確認
実際にパーティション化されているか確認してみましょう。

テストデータがそれぞれ想定した年度に振り分けられていることが「ros_row_count列」の値から分かります。
※同じ結果にならない場合は、後述の注意事項をご確認ください。

方法2. ファンクションで実装

ファンクションを利用して任意の単位でパーティショニングすることができます。
方法1.と同様にCASE文を組み合わせて任意の期間にパーティショニングの指定をします。

(1)ファンクションの定義

(2)テーブルの作成

(3)テストデータの挿入
今回の例では以下のデータを挿入します。
2016年度 4件
2017年度 3件
2018年度 1件

(4)パーティション状況を確認

ファンクションを利用した場合にも、テストデータがそれぞれ想定した年度に振り分けられていることが分かります。
※同じ結果にならない場合は、後述の注意事項をご確認ください。

注意事項

データがパーティション化されるのはMergeoutが実行されるタイミングです。
このため、確認するタイミングによってはパーティション化されていない場合があります。

もし結果をすぐに確認する場合には、以下の記事を参考に手動でMergeoutを実行してからご確認ください。

【参考】
MoveoutとMergeout
MoveoutとMergeoutの手動実行

検証バージョンについて

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

更新履歴

2019/04/15 検証バージョンを9.2に変更
2017/03/17 本記事を公開