レベル1の列パーティションを持つordersテーブルの列パーティション バージョンであるorders_cpを作成したとします。
orders_cpにデータが入力されていない場合、次のALTER TABLE ... MODIFYリクエストを実行して、1つのレベルの行パーティションのみを持つように変更できます。
ALTER TABLE orders_cp MODIFY PARTITION BY (COLUMN, RANGE_N(o_orderdate BETWEEN DATE '2000-01-01' AND DATE '2006-12-31' EACH INTERVAL '1' MONTH));
テーブルorders_cpは2バイトのパーティション化を持っています。
日付が2000-01-01から2000-12-31の間のorders_cpにo_orderdateの行がない場合、次の同等のALTER TABLE … MODIFYリクエストの1つを実行して、レベル2のパーティション式を変更できます。
ALTER TABLE orders_cp MODIFY DROP RANGE#L2 BETWEEN DATE '2000-01-01' AND DATE '2000-12-31' ADD RANGE#L2 BETWEEN DATE '2007-01-01' AND DATE '2011-12-31' EACH INTERVAL '1' MONTH;
または
ALTER TABLE orders_cp MODIFY DROP RANGE WHERE orders.cp.PARTITION#L2 BETWEEN 1 AND 12 ADD RANGE#L2 BETWEEN DATE '2007-01-01' AND DATE '2011-12-31' EACH INTERVAL '1' MONTH;
または
ALTER TABLE orders_cp MODIFY DROP RANGE#L2 WHERE PARTITION#L2 IN (1,2,3,4,5,6,7,8,9,10,11,12) ADD RANGE BETWEEN DATE '2007-01-01' AND DATE '2011-12-31' EACH INTERVAL '1' MONTH;
orders_cpの2000-01-01から2000-12-31の間のo_orderdateの列が0、1、またはそれ以上ある場合、次のALTER TABLEリクエストを実行して、orders_cpの行パーティション レベルを変更できます。この場合、WITH DELETE指定があるため、Vantageは削除された範囲から行を削除します。
レベル2にパーティションをさらに追加しても、レベル2で定義された最大値を超えないため、このALTER TABLE ... MODIFYリクエストは入力されたテーブルに対して有効です。これは、超過している組み合わせパーティションが、デフォルトのADDオプションとしてレベル2に割り当てられているためです。
ALTER TABLE orders_cp MODIFY DROP RANGE#L2 BETWEEN DATE '2000-01-01' AND DATE '2000-12-31' ADD RANGE BETWEEN DATE '2007-01-01' AND DATE '2011-12-31' EACH INTERVAL '1' MONTH WITH DELETE;
以前定義したorders_cpを使用してテーブル1を作成し、old_ordersという名前の別のテーブルも作成するとします。
CREATE TABLE old_orders ( o_orderkey INTEGER NOT NULL, o_custkey INTEGER, o_orderstatus CHARACTER(1) CASESPECIFIC, o_totalprice DECIMAL(13,2) NOT NULL, o_orderdate DATE FORMAT 'yyyy-mm-dd' NOT NULL) UNIQUE PRIMARY INDEX (o_orderkey);
次のALTER TABLEリクエストは、2000-01-01から2000-12-31の間のo_orderdateの行が0、1、またはそれ以上である場合に、行パーティションを変更する1つの方法です。この場合、システムはorders_cpから行を削除する前に、その行をold_ordersに保存します。
ALTER TABLE orders_cp MODIFY DROP RANGE BETWEEN DATE '2000-01-01' AND DATE '2000-12-31' ADD RANGE BETWEEN DATE '2007-01-01' AND DATE '2011-12-31' EACH INTERVAL '1' MONTH WITH INSERT INTO old_orders;
すでにordersには、レベル1で追加された列パーティションを使用したCREATE TABLEが定義されていて、プライマリ インデックスが削除されているとします(例: マルチレベルのパーティション テーブルのためのパーティションの変更を参照)。新しいテーブルにはorders_cpという名前が付いています。テーブルorders_cpは8バイトのパーティション化を持っています。次のALTER TABLEリクエストを実行して、両方のレベルでパーティション式を変更できます。
ALTER TABLE orders_cp MODIFY DROP RANGE BETWEEN 0 AND 399 ADD RANGE BETWEEN 50000 AND 50899 EACH 100, DROP RANGE WHERE PARTITION#L3 = 1 ADD RANGE BETWEEN DATE '2007-01-01' AND DATE '2007-01-31' WITH DELETE;
レベル2のパーティション数は5ずつ増加し、レベル3のパーティション数は、レベル3のデフォルトがADD 0であるため同じままであり、超過している組み合わせパーティションはレベル2に割り当てられ、レベル3がパーティション数を増加できる余地はありません。