はじめに

MOVE_PARTITIONS_TO_TABLE関数を使用して、パーティションをあるテーブルから別のテーブルに移動できます。
この機能を利用して、アクセス頻度の低いパーティションをアーカイブできます。

構文

パラメータ説明
[[database.]schema.]source‑tableソーステーブルを指定
min‑range‑valueデータ移行対象とするパーティションデータの下限を指定
max‑range‑valueデータ移行対象とするパーティションデータの上限を指定
[[database.]schema.]target-tableターゲットテーブルを指定
force‑splitパーティションキーの範囲が複数のコンテナまたは単一のコンテナの一部にまたがる場合、ROSコンテナを分割するかどうかを指定します。

true :必要に応じてROSコンテナを分割します。
false:この操作を実行するためにROSコンテナを分割する必要がある場合、エラーを返します。
※デフォルトはfalse

ソーステーブル…データの移行元テーブル
ターゲットテーブル…データの移行先テーブル

使用例

任意の範囲のパーティションを、ソーステーブルからターゲットテーブルへ移動させる一連の手順を以下にご案内します。

■年単位のパーティションテーブルを作成
ソーステーブルとターゲットテーブルをそれぞれ作成します。

※ターゲットテーブルの作成は、以下の記事をご確認ください。
既存テーブルのテーブル定義のみをコピーして、新規にテーブルを作成する方法
http://vertica-tech.ashisuto.co.jp/create_table_like/

■データロード
サンプルデータをソーステーブルにロードします。

■ムーブアウト実行
ロードしたデータをディスクに移動させます。

■テーブルデータの確認
両テーブルの現在保持しているデータを確認します。

■PARTITIONSシステムテーブルを確認
システムテーブルからパーティションキー列が格納されている場所を確認します。

■一部のパーティションをnew_t1テーブルからold_t1テーブルに移動

■テーブルデータの確認
両テーブルの現在保持しているデータを確認します。

■PARTITIONSシステムテーブルを確認
システムテーブルからパーティションキー列が格納されている場所を確認します。

注意事項

権限について

MOVE_PARTITIONS_TO_TABLEを実行するには、次の内いずれかの一つ条件を満たす必要があります。
・DBADMINロールを付与されている
・ソーステーブルとターゲットテーブルの所有者である
・ソースおよびターゲットスキーマに対するUSAGE権限、ソーステーブルに対するTRUNCATE権限、およびターゲットテーブルに対するINSERT権限を付与されている

また、ターゲットテーブルが存在していない場合、ターゲットスキーマに対するCREATE権限を保持していれば、MOVE_PARTITIONS_TO_TABLEの実行時にテーブルを作成します。

テーブル属性の要件

ソーステーブルとターゲットテーブルは、以下の設定が同じである必要があります。
・NOT NULL制約を含む列定義
・セグメンテーションの有無
・パーティション句
・プロジェクション数
・プロジェクションのソート順
・主キーおよび一意キーの制約
※有効/無効の状態は問いません。
ただし、主キーまたは一意キーが有効になっているターゲットテーブルに対し、重複したパーティションキー列の値が挿入される場合、処理はロールバックされます。

テーブルの制限

以下のオブジェクトはソーステーブルあるいはターゲットテーブルとして使用できません。
・一時テーブル
・ビュー
・システムテーブル
・外部テーブル

参考情報

MOVE_PARTITIONS_TO_TABLE
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/PartitionManagement/MOVE_PARTITIONS_TO_TABLE.htm

検証バージョンについて

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

更新履歴

2019/08/22 本記事を公開