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
日本語 (日本)

以下のテーブルが作成済みであるとします。

     CREATE TABLE orders (
       o_orderkey INTEGER NOT NULL,
       o_custkey INTEGER,
       o_orderstatus CHAR(1) NOT CASESPECIFIC,
       o_totalprice DECIMAL(13,2) NOT NULL,
       o_orderdate DATE FORMAT 'yyyy-mm-dd' NOT NULL,
       o_orderpriority CHAR(21),
       o_comment VARCHAR(79))
     PRIMARY INDEX (o_orderkey)
     PARTITION BY (RANGE_N(o_custkey BETWEEN 0 
                                     AND 49999 
                                     EACH 1000),
                   RANGE_N(o_orderdate BETWEEN DATE '2000-01-01' 
                                       AND     DATE '2006-12-31'
                                       EACH INTERVAL '1' MONTH) ADD 24,
                   RANGE_N(o_orderpriority BETWEEN 'high' 
                                           AND     'highest',
                                                   'low' 
                                           AND     'lowest',
                                                   'medium' 
                                           AND     'medium',
                   NO RANGE OR UNKNOWN))
     UNIQUE INDEX (o_orderkey);

次のALTER TABLEリクエストは、ordersが空である場合にのみ有効です。

     ALTER TABLE orders 
     MODIFY 
     PARTITION BY (RANGE_N(o_custkey   BETWEEN 0  
                                       AND 49999  
                                       EACH 1000),
                   RANGE_N(o_orderdate BETWEEN DATE '2000-01-01' 
                                       AND     DATE '2006-12-31' 
                                       EACH INTERVAL '1' MONTH ),
                   CASE_N(o_orderstatus = 'S',
                          o_orderstatus = 'C',
                          o_orderstatus = 'F',
                          o_orderstatus = 'T', 
                   NO CASE OR UNKNOWN) );

上記のordersに対する テーブル定義では、2000-01-01から2000-12-31の間にレベル2の行パーティション式を変更するo_orderdate値を持つ行がない場合に、次の同等のリクエストのいずれかを実行できます。

     ALTER TABLE orders 
     MODIFY 
     DROP RANGE#L2 BETWEEN DATE '2000-01-01' 
                   AND     DATE '2000-12-31'
     ADD RANGE BETWEEN DATE '2007-01-01' 
               AND     DATE '2007-12-31' 
               EACH INTERVAL '1' MONTH;
     ALTER TABLE orders 
     MODIFY 
     DROP RANGE#L2 WHERE orders.PARTITION#L2 BETWEEN 1 
                                             AND    12
     ADD RANGE#L2 BETWEEN DATE '2007-01-01' 
                  AND     DATE '2007-12-31'
                  EACH INTERVAL '1' MONTH;
     ALTER TABLE orders 
     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 '2007-12-31' 
               EACH INTERVAL '1' MONTH;

ordersに対するテーブルの定義では、テーブルに行が入力されている場合にも次のALTER TABLEリクエストが有効です。ただし、このリクエストではWITH句を指定していないため、削除される範囲は空である必要があります。

     ALTER TABLE orders 
     MODIFY PRIMARY INDEX
     DROP RANGE#L1 BETWEEN 0 
                   AND   999
     ADD RANGE BETWEEN 50000 
               AND     50999;

これらのALTER TABLE MODIFY ADD/DROP RANGEリクエストは、セッション照合がPPI照合に一致し、セッション モードが文字PPIの作成時に有効であったセッション モードと一致する場合にのみ実行されます。

同じオリジナル スキーマに基づく次の例は、エラーを返します。

     ALTER TABLE orders 
     MODIFY 
     DROP RANGE#L3 BETWEEN 'medium' 
                   AND     'medium'
     ADD RANGE BETWEEN     'medium' 
               AND         'urgent';

ordersテーブルの文字の行パーティション レベルにかかわる次のADD/DROPリクエストは、特別な行パーティションNO RANGE OR UNKNOWNおよびUNKNOWNのみにかかわり、NO RANGE OR UNKNOWN行パーティションがUNKNOWNパーティションにより置き換えられるため、有効です。

     ALTER TABLE orders 
     MODIFY PRIMARY INDEX
     DROP RANGE#L3 WHERE PARTITION#L3 = 4
     ADD RANGE#L3 UNKNOWN;