例: MODIFYを使用したテーブルの再パーティション化と、その結果としての無効行の保存テーブルへの保存 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/spp1591731285373.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

例に使用する テーブル定義で定義したordersテーブルが存在すること、また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,
      o_orderpriority CHARACTER(21),
      o_clerk         CHARACTER(16),
      o_shippriority  INTEGER,
      o_comment       VARCHAR(79))
     UNIQUE PRIMARY INDEX (o_orderkey);

以下のALTER TABLEリクエストは、o_orderdateが1992年1月1日~1992年12月31日(DATE '1992-01-01 AND DATE '1992-12-31')の範囲にある行が0行以上ある場合に有効です。

MODIFYオプションはこの範囲にある値を持つ行をold_orders保存テーブルに移動し、その後ordersから削除します。

     ALTER TABLE orders 
     MODIFY
       DROP RANGE BETWEEN DATE '1992-01-01' 
                  AND     DATE '1992-12-31'
       ADD  RANGE BETWEEN DATE '1999-01-01' 
                  AND     DATE '2000-12-31'
                  EACH INTERVAL '1' MONTH
     WITH INSERT INTO old_orders;

ordersが列パーティション テーブルorders_cpとして定義されているとします。

以下のALTER TABLEリクエストは、o_orderdateが1992年1月1日~1992年12月31日(DATE '1992-01-01 AND DATE '1992-12-31')の範囲にある行が0行以上ある場合に有効です。

MODIFYオプションはこの範囲にある値を持つ行をold_orders保存テーブルに移動し、その後orders_cpから削除します。

     ALTER TABLE orders_cp 
     MODIFY
       DROP RANGE BETWEEN DATE '1992-01-01' 
                  AND     DATE '1992-12-31'
       ADD  RANGE BETWEEN DATE '1999-01-01' 
                  AND     DATE '2000-12-31'
                  EACH INTERVAL '1' MONTH
     WITH INSERT INTO old_orders;