ALTER TABLE(ANSI二重テンポラル テーブル形式) - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ngt1556732962433.ditamap
dita:ditavalPath
ja-JP/ngt1556732962433.ditaval
dita:id
B035-1186
Product Category
Software
Teradata Vantage

目的

ALTER TABLEのテンポラル構文を使用すると、既存の非テンポラル テーブルからANSI二重テンポラル テーブルを作成し、system-timeテーブルおよびvalid-timeテーブルのALTER TABLE構文を組み合わせることができます。

テーブルに有効時間を追加する操作には、次に示すALTER TABLE操作が含まれます。
  • valid-time期間の開始境界および終了境界として使用される2つのDateTime列を追加または変更する
  • valid-time派生期間列をテーブルに追加して、派生列VALIDTIMEを指定する
テーブルにシステム時間を追加する操作には、次に示すALTER TABLE操作が含まれます。
  • system-time期間の開始境界および終了境界として使用される列を指定して、SYSTEM_TIME派生期間列をテーブルに追加する
  • system-time期間の開始境界および終了境界として使用される列を追加または変更する。これらの列がテーブル内にすでに存在する場合は、特殊な属性を追加する必要があります。
  • テーブルにシステムのバージョン情報を追加する

構文

テーブルを二重テンポラル テーブルに変更するための特殊な構文はありません。ALTER TABLE (ANSI System-Timeテーブル フォーム)ALTER TABLE (ANSI Valid-Timeテーブル フォーム)で説明されている特殊構文を組み合わせて使用してください。

system-time次元を追加する前に、テーブルを変更してvalid-time次元を追加する必要があります。system-timeテーブルに対するALTER TABLE操作は厳しく制限されているためです。

例: ALTER TABLEによる非テンポラル テーブルからANSI二重テンポラル テーブルへの変換

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

CREATE MULTISET TABLE employee_bitemp (
 eid INTEGER NOT NULL,
 ename VARCHAR(5),
 deptno INTEGER NOT NULL,
 terms VARCHAR(5),
 job_start DATE NOT NULL,
 job_end DATE NOT NULL,
 sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL,
 sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL
 )
 PRIMARY INDEX (eid);

INSERT INTO employee_bitemp VALUES 

 (1001,'Sania',111,'TW08',DATE'2002-01-01',DATE'2006-12-31',
  TIMESTAMP'2002-01-01 00:00:00.000000-08:00',
  TIMESTAMP'2002-07-01 12:00:00.350000+00:00');
INSERT INTO employee_bitemp VALUES 
 (1004,'Fred',222,'PW12', DATE'2001-05-01',DATE'9999-12-31',
  TIMESTAMP'2001-05-01 12:00:00.350000-08:00',
  TIMESTAMP'9999-12-31 23:59:59.999999+00:00');
INSERT INTO employee_bitemp VALUES
 (1002,'Ash',333,'TA05',DATE'2003-01-01',DATE'2003-12-31',
  TIMESTAMP'2003-01-01 12:11:00.000000-08:00', 
  TIMESTAMP'9999-12-31 23:59:59.999999+00:00');
INSERT INTO employee_bitemp VALUES 
 (1003,'SRK',111,'TM02',DATE'2004-02-10',DATE'2005-02-10', 
  TIMESTAMP'2004-02-10 00:00:00.000000-08:00', 
  TIMESTAMP'2004-12-01 00:12:23.120000+00:00');
INSERT INTO employee_bitemp VALUES 
 (1005,'Alice',222,'TW10',DATE'2004-12-01',DATE'9999-12-31',
  TIMESTAMP'2004-12-01 12:00:00.450000-08:00', 
  TIMESTAMP'9999-12-31 23:59:59.999999+00:00');
INSERT INTO employee_bitemp VALUES 
 (1010,'Mike',444,'TW07',DATE'2015-01-01',DATE'2016-12-31',
  TIMESTAMP'2004-12-01 00:12:23.120000-08:00', 
  TIMESTAMP'9999-12-31 23:59:59.999999+00:00');

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

SELECT * FROM employee_bitemp;

 eid ename deptno terms   job_start     job_end                         sys_start                           sys_end
---- ----- ------ -----  ----------  ----------  --------------------------------  --------------------------------
1002 Ash      333  TA05  2003/01/01  2003/12/31  2003-01-01 12:11:00.000000-08:00  9999-12-31 23:59:59.999999+00:00
1005 Alice    222  TW10  2004/12/01  9999/12/31  2004-12-01 12:00:00.450000-08:00  9999-12-31 23:59:59.999999+00:00
1010 Mike     444  TW07  2015/01/01  2016/12/31  2004-12-01 00:12:23.120000-08:00  9999-12-31 23:59:59.999999+00:00
1001 Sania    111  TW08  2002/01/01  2006/12/31  2002-01-01 00:00:00.000000-08:00  2002-07-01 12:00:00.350000+00:00
1004 Fred     222  PW12  2001/05/01  9999/12/31  2001-05-01 12:00:00.350000-08:00  9999-12-31 23:59:59.999999+00:00
1003 SRK      111  TM02  2004/02/10  2005/02/10  2004-02-10 00:00:00.000000-08:00  2004-12-01 00:12:23.120000+00:00

次のALTER TABLE文はテーブルに有効時間を追加します。

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

テーブルから単に選択した場合は、任意のvalid-timeテーブルから選択する場合と同様に、すべての行が返されます。

SELECT * FROM employee_bitemp;

 eid ename deptno terms   job_start     job_end                         sys_start                           sys_end
---- ----- ------ -----  ----------  ----------  --------------------------------  --------------------------------
1002 Ash      333  TA05  2003/01/01  2003/12/31  2003-01-01 12:11:00.000000-08:00  9999-12-31 23:59:59.999999+00:00
1005 Alice    222  TW10  2004/12/01  9999/12/31  2004-12-01 12:00:00.450000-08:00  9999-12-31 23:59:59.999999+00:00
1010 Mike     444  TW07  2015/01/01  2016/12/31  2004-12-01 00:12:23.120000-08:00  9999-12-31 23:59:59.999999+00:00
1001 Sania    111  TW08  2002/01/01  2006/12/31  2002-01-01 00:00:00.000000-08:00  2002-07-01 12:00:00.350000+00:00
1004 Fred     222  PW12  2001/05/01  9999/12/31  2001-05-01 12:00:00.350000-08:00  9999-12-31 23:59:59.999999+00:00
1003 SRK      111  TM02  2004/02/10  2005/02/10  2004-02-10 00:00:00.000000-08:00  2004-12-01 00:12:23.120000+00:00

次のALTER TABLE文はテーブルにシステム時間を追加します。

ALTER TABLE employee_bitemp
 ADD PERIOD FOR SYSTEM_TIME(sys_start,sys_end)
 ADD sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL
               GENERATED ALWAYS AS ROW START
 ADD sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL
               GENERATED ALWAYS AS ROW END;
ALTER TABLE employee_bitemp
 ADD SYSTEM VERSIONING;

テーブルにsystem-time次元が追加されたため、sys_endの日付が9999-12-31 23:59:59.999999+0:0でない行はクローズ行とみなされ、データベースから論理的に削除されます。したがって、テーブルを単に選択した場合は、4行のみ表示されます。

SELECT * FROM employee_bitemp;

 eid ename deptno terms   job_start     job_end                         sys_start                           sys_end
---- ----- ------ -----  ----------  ----------  --------------------------------  --------------------------------
1002 Ash      333  TA05  2003/01/01  2003/12/31  2003-01-01 12:11:00.000000-08:00  9999-12-31 23:59:59.999999+00:00
1005 Alice    222  TW10  2004/12/01  9999/12/31  2004-12-01 12:00:00.450000-08:00  9999-12-31 23:59:59.999999+00:00
1010 Mike     444  TW07  2015/01/01  2016/12/31  2004-12-01 00:12:23.120000-08:00  9999-12-31 23:59:59.999999+00:00
1004 Fred     222  PW12  2001/05/01  9999/12/31  2001-05-01 12:00:00.350000-08:00  9999-12-31 23:59:59.999999+00:00