テーブルへのTransaction-Time列の追加 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ テンポラル テーブル サポート

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/avd1530664741287.ditamap
dita:ditavalPath
ja-JP/avd1530664741287.ditaval
dita:id
B035-1182
Product Category
Software
Teradata Vantage

非テンポラル テーブルまたはvalid-timeテーブルにtransaction-time列を追加するには、ALTER TABLE文を使用します。

テンポラル テーブルは、固有プライマリ インデックスを持つことはできません。元の非テンポラル テーブルに固有プライマリ インデックスがある場合、テンポラル列を追加する前に、ALTER TABLEを使用してプライマリ インデックスを非固有に変更してください。テンポラル テーブルに対する固有性は、他の制約を使用して適用できます。詳細については、テンポラル テーブルに対する制約の使用を参照してください。

例: 2つの既存のタイムスタンプ列に基づくTransaction-Time列の作成

非テンポラル テーブルに、期間の開始境界値と終了境界値を表現する2つの既存のTIMESTAMP(6) WITH TIME ZONE列がある場合、これらの列に基づくテーブルに、派生PERIOD列を追加できます。派生PERIOD列をtransaction-timet列として使用し、テーブルをテンポラル テーブルに変換することができます。

派生PERIOD列の開始列と終了列は、派生PERIOD列をvalid-time列またはtransaction-time列として使用する場合、プライマリ インデックスに含めることはできません。

元は次のDDL文を使用してテーブルが作成されたとします。

   CREATE MULTISET TABLE Policy(
      Policy_ID INTEGER,
      Customer_ID INTEGER,
      Policy_Type CHAR(2) NOT NULL,
      Policy_Details CHAR(40),
      Policy_Tx_Begin TIMESTAMP(6) WITH TIME ZONE NOT NULL,
      Policy_Tx_End TIMESTAMP(6) WITH TIME ZONE NOT NULL
      )
   PRIMARY INDEX(Policy_ID);

テーブルをテンポラル テーブルに変換する前に、既存の制約をメモしてから削除する必要があります。次の文を使用して、テーブルをtransaction-timeテーブルに変換することができます。

   ALTER TABLE Policy
     ADD PERIOD FOR Policy_Tx_Duration (Policy_Tx_Begin,Policy_Tx_End) 
      AS TRANSACTIONTIME;

テンポラル テーブルを作成した後で、削除された制約を再適用できます。

例: PERIODデータ型transaction-time列の追加

継続時間データを含んでいない以下の非テンポラル テーブルの定義について検討します。

   CREATE MULTISET TABLE Customer (
      Customer_Name VARCHAR(40),
      Customer_ID INTEGER,
      Customer_Address VARCHAR(80),
      Customer_Phone VARCHAR(12)
      )
   PRIMARY INDEX (Customer_ID);

次の文は、Customerテーブルにtransaction-time列を追加します。

   ALTER TABLE Customer
   ADD Customer_Duration PERIOD(TIMESTAMP(6) WITH TIME ZONE) NOT NULL
      AS TRANSACTIONTIME;

PERIOD列のTransaction-Time列への変換

PERIOD(TIMESTAMP(6) WITH ZONE)というタイプの列を含むテーブルがある場合、次の手順を実行して既存のPERIOD列をtransaction-time列に変換します。

  1. 元のテーブルに対するすべての制約情報をメモします。
  2. 元のテーブルに対するすべての制約を削除します。
  3. テーブルのユーザーにNONTEMPORAL権限を付与します。
  4. ALTER TABLEを使用して、transaction-time列を追加します。
  5. NONTEMPORAL UPDATEを実行し、変換する既存の列の値で新しいtransaction-time列を設定します。
  6. ALTER TABLEを使用して、既存のPERIOD列を削除します。
  7. ALTER TABLEを使用して、transaction-time列の名前を削除した列の名前に変更します。
  8. 事前に削除したすべての制約を、目的に合ったtransaction-time修飾子を使用して作成します。