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_cpという名前の前の例から、列パーティション バージョンであるordersテーブルを作成したとします。

次のALTER TABLEリクエストは、orders_cpにデータが入力されていない場合にのみ有効です。

     ALTER TABLE orders_cp
     MODIFY
     PARTITION BY (COLUMN,
                   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 48,
                   RANGE_N(o_orderstatus =  'S',
                           o_orderstatus =  'C',
                           o_orderstatus =  'F',
                           o_orderstatus =  'T', 
                   NO CASE OR UNKNOWN) );

orders_cpが空であるために以前のリクエストが成功した場合、2000-01-01から2000-12-31の間にレベル3のパーティション式を変更するo_orderdate値を持つ行がないときに、次の同等の要求のいずれかを実行できます。

     ALTER TABLE orders_cp 
     MODIFY
     DROP RANGE#L3 BETWEEN DATE '2000-01-01' 
                   AND     DATE '2000-12-31'
     ADD RANGE BETWEEN DATE '2007-01-01' 
               AND     DATE '2008-12-31' 
               EACH INTERVAL '1' MONTH;
     ALTER TABLE orders_cp 
     MODIFY
     DROP RANGE#L3 WHERE orders_cp.PARTITION#L2 BETWEEN 1 
                                                AND    12
     ADD RANGE#L3 BETWEEN DATE '2007-01-01' 
                  AND     DATE '2008-12-31'
                  EACH INTERVAL '1' MONTH;
     ALTER TABLE orders_cp
     MODIFY
     DROP RANGE#L3 WHERE PARTITION#L3 IN (1,2,3,4,5,6,7,8,9,10,11,12)
     ADD RANGE BETWEEN DATE '2007-01-01' 
               AND     DATE '2008-12-31' 
               EACH INTERVAL '1' MONTH;

orders_cpが列パーティションである場合、テーブルにデータが入力されているときにも次のALTER TABLE ... MODIFYリクエストが有効です。

     ALTER TABLE orders_cp 
     MODIFY
     DROP RANGE#L2 BETWEEN 0 
                   AND   999
     ADD RANGE BETWEEN 50000 
               AND     54999
               EACH      100;

これらのALTER TABLE MODIFY ADD/DROP RANGEリクエストは、セッション照合およびセッション モードがテーブルの作成時と同じである場合にのみ実行されます。

同じオリジナル スキーマに基づく次の例は、セッション照合またはセッション モードのいずれかがorders_cpの作成時と異なる場合にエラーを返します。

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

orders_cp表の文字のパーティション レベルにかかわる次のADD/DROPリクエストは、特別な行パーティションNO RANGE OR UNKNOWNおよびUNKNOWNのみにかかわり、NO RANGE OR UNKNOWN行パーティションがUNKNOWNパーティションにより置き換えられるため、有効です。Vantageorders_cpに対して定義された範囲のいずれにも属さない行を削除します。

     ALTER TABLE orders_cp 
     MODIFY
     DROP RANGE#L4 WHERE PARTITION#L3 = 4
     ADD RANGE#L4 UNKNOWN
     WITH DELETE;