16.20 - ALTER TABLE (ANSI Valid-Timeテーブル フォーム) - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1186-162K-JPN

目的

ALTER TABLEのテンポラル構文で既存のテーブルのANSIテンポラルvalid-timeテーブルを作成することができます。このテーブルを使用して、すでに作成されている可能性のあるDateTime列を持つ既存のテーブルを変更できます。この列を使って、行内の情報が有効である有効期間を手動で追跡します。

テーブルに有効時間を追加する操作には、次に示すALTER TABLE操作が含まれます。

  • valid-time期間の開始境界および終了境界として使用される2つのDateTime列を追加または変更する
  • valid-time派生期間列のテーブルへの追加、および派生期間列VALIDTIMEの指定

構文

次のALTER TABLE構文を使用して、valid-time派生期間列を追加することにより、valid-timeテーブルを作成します。



valid-time派生期間列を削除するには、次の構文を使用します。



table_name
valid-timeテーブルの名前。データベース修飾子を含む場合があります。
valid_time_period
valid-time派生期間列の名前。
valid_start
valid-time期間の開始境界を保存する列の名前。
valid_end
valid-time期間の終了境界を保存する列の名前。
[AS] VALIDTIME
Teradata Databaseでvalid-timeテーブルを作成するために必要です。
[AS] VALIDTIME句を使用すれば、valid-timeテーブルのSELECT文でANSIがvalid-timeテーブルでサポートしていない特別なテンポラル修飾子(AS OF、BETWEEN...AND、FROM TO、CONTAINED IN)を使用できます。詳細については、Valid-Time変更を参照してください。
[AS] VALIDTIMEは、ANSIに対するTeradata Databaseの拡張機能です。
WITHOUT DELETE
valid-time派生期間列をテーブルから削除するときに履歴行と将来行が自動的に削除されないようにします。
WITHOUT DELETEは、ANSIに対するTeradata Databaseの拡張機能です。

ANSI準拠

この文はANSI SQL:2011に準拠していますが、非ANSI Teradata Database拡張機能を含みます。

使用上の注意

  • [AS] VALIDTIMEは、ANSIに対する拡張機能です。これは、Teradata Databaseでvalid-timeテーブルを作成するために必要になります。[AS] VALIDTIME句を使用すれば、valid-timeテーブルのSELECT文でANSIがvalid-timeテーブルでサポートしていない特別なテンポラル修飾子(AS OF、BETWEEN...AND、FROM...TO、CONTAINED IN)を使用できます。詳細については、ANSI Valid-Timeテーブルの問合わせを参照してください。
  • valid-time派生期間列をvalid-timeテーブルから削除すると、WITHOUT DELETEオプションを使用しない限り、履歴行と将来行がすべてテーブルから削除されます。

例: 非テンポラル テーブルをValid-Timeテーブルに変換するALTER TABLE

次のSQL文は通常の非テンポラル テーブルを作成し、行をいくつか挿入します。

CREATE MULTISET TABLE employee_vt (
 eid INTEGER NOT NULL,
 ename VARCHAR(5) NOT NULL,
 terms VARCHAR(5),
 job_start DATE NOT NULL,
 job_end DATE NOT NULL
 ) PRIMARY INDEX(eid);

行が挿入された後に、修飾されていないSELECTをテーブルに実行すると、すべての行が返されます。

SELECT * FROM employee_systime;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1002 Ash    TA05 2003/01/01  2003/12/31
1005 Alice  TW10 2004/12/01  2005/12/01
1010 Mike   TW07 2015/01/01  2016/12/31
1005 Alice  PW11 2005/12/01  9999/12/31
1001 Sania  TW08 2002/01/01  2006/12/31
1004 Fred   PW12 2001/05/01  9999/12/31
1003 SRK    TM02 2004/02/10  2005/02/10


次のALTER TABLE文でテーブルをvalid-timeテンポラル テーブルに変換します。

ALTER TABLE employee_vt
 ADD PERIOD FOR job_dur(job_start,job_end) AS VALIDTIME;

system-timeテーブルと違って、valid-timeテーブルの非修飾SELECTでは、valid-time期間が過去か、現在か、将来かに関わらず、テーブル内のすべての行が表示されます。

SELECT * FROM employee_systime;

 eid ename terms  job_start     job_end
---- ----- ----- ---------- -----------
1002 Ash    TA05 2003/01/01  2003/12/31
1005 Alice  TW10 2004/12/01  2005/12/01
1010 Mike   TW07 2015/01/01  2016/12/31
1005 Alice  PW11 2005/12/01  9999/12/31
1001 Sania  TW08 2002/01/01  2006/12/31
1004 Fred   PW12 2001/05/01  9999/12/31
1003 SRK    TM02 2004/02/10  2005/02/09


SELECT問合わせ、およびUPDATE、DELETE変更でテンポラル修飾句を使用すると、valid-timeテーブルに自動テンポラル動作が明示されます。詳細については、ANSI Valid-Timeテーブルの問合わせANSI Valid-Timeテーブルの行の変更を参照してください。