17.05 - 例: マルチレベルの列パーティション テーブルのための行パーティションの変更 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

レベル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_cpo_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がパーティション数を増加できる余地はありません。