OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

非パーティションテーブルをパーティションテーブルに変更

公開日:
更新日:
基本操作
#パーティショニング

はじめに

作成した非パーティションテーブルをパーティションテーブルに変更する方法をご紹介します。
非パーティションテーブルにデータをロードした後でもテーブルを再作成することなくオンラインでパーティションテーブルに変更することがきます。

パーティショニングに関しては以下を参照ください。

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

パーティションテーブルに変更する方法

■lineorder表を非パーティションで作成します。
dbadmin=> CREATE TABLE ssbm.LINEORDER (LO_ORDERKEY NUMERIC(10),
                                       LO_LINENUMBER INTEGER,
                                       LO_CUSTKEY  NUMERIC(10),
                                       LO_PARTKEY  INTEGER,
                                       LO_SUPPKEY  NUMERIC(10),
                                       LO_ORDERDATE DATE NOT NULL,  <=== ★
                                       LO_ORDERPRIORITY CHAR(15),
                                       LO_SHIPPRIORITY CHAR(1),
                                       LO_QUANTITY NUMERIC(10),
                                       LO_EXTENDEDPRICE NUMERIC(10),
                                       LO_ORDERTOTALPRICE NUMERIC(10),
                                       LO_DISCOUNT NUMERIC(10),
                                       LO_REVENUE NUMERIC(10),
                                       LO_SUPPLYCOST NUMERIC(10),
                                       LO_TAX NUMERIC(10),
                                       LO_COMMIT_DATE NUMERIC(10),
                                       LO_SHIPMODE CHAR(10))
;

■lineorder表にデータがロードされた状態でlo_orderdate列(DATE型)の年でパーティショニングします。
dbadmin=> ALTER TABLE lineorder PARTITION BY EXTRACT(year from lo_orderdate) REORGANIZE;

■lineorder表がパーティション化されていることを確認します。
dbadmin=> SELECT PARTITION_KEY,PROJECTION_NAME,ROS_SIZE_BYTES,ROS_ROW_COUNT,NODE_NAME FROM partitions ORDER BY partition_key;
 PARTITION_KEY | PROJECTION_NAME | ROS_SIZE_BYTES | ROS_ROW_COUNT |    NODE_NAME
---------------+-----------------+----------------+---------------+-----------------
 1992          | LINEORDER_super |       43775956 |       1513933 | v_vdb2_node0001
 1993          | LINEORDER_super |       43909447 |       1518755 | v_vdb2_node0001
 1994          | LINEORDER_super |       43941216 |       1519659 | v_vdb2_node0001
 1995          | LINEORDER_super |       43891114 |       1518060 | v_vdb2_node0001
 1996          | LINEORDER_super |       44015590 |       1522426 | v_vdb2_node0001
 1997          | LINEORDER_super |       43829193 |       1515763 | v_vdb2_node0001
 1998          | LINEORDER_super |       25655660 |        891404 | v_vdb2_node0001

PARTITION_KEYを確認することで年単位でパーティショニングされていることがわかります。

※すでに最適化された状態であれば、パーティションテーブルに変更した後に最適化を行う必要はありません。

考慮事項

・パーティションの対象列にはNOT NULL制約を設定する必要があります。
・パーティション句の式で使用されるSQL関数は不変でなければなりません。
・パーティション句で集合演算(MAXやAVGなど)などのクエリは指定できません。
・非パーティションテーブルからパーティションテーブルに変更する際は負荷が高くなりますので、システムに影響がない時間帯で行ってください。

検証バージョンについて

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

更新履歴

2019/03/13 検証バージョンを9.2に変更
2015/11/18 本記事を公開