例 - Advanced SQL Engine - Teradata Database

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

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

以下の例では、オープン行とクローズ行の混合を含むemployee_systimeという名前の次のシステムのバージョン情報を含むsystem-timeテーブルに対して問合わせが実行されると仮定しています。

 eid ename  deptno                        sys_start                          sys_end
---- ------ ------ -------------------------------- --------------------------------
1002 Ash       333 2003-07-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice     222 2004-12-01 00:12:23.120000-08:00 2005-05-01 12:00:00.450000-08:00
1004 Fred      222 2002-07-01 12:00:00.350000-08:00 2005-05-01 12:00:00.350000-08:00
1001 Sania     111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1003 SRK       111 2004-02-10 00:00:00.000000-08:00 2006-03-01 00:00:00.000000-08:00
1004 Fred      555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice     555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00

システム時間のあるテーブルで、UPDATEの対象になるのは、オープン行だけです。テンポラル修飾子のない簡単なSELECTでテーブルのオープン行が返されます。

SELECT * FROM employee_systime;

 eid ename  deptno                        sys_start                          sys_end
---- ------ ------ -------------------------------- --------------------------------
1002 Ash       333 2003-07-01 12:11:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1001 Sania     111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1004 Fred      555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice     555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00

UPDATE employee_systime SET deptno=888 WHERE ename=’Ash’;

簡単なSELECTで行が予測どおりに変更されたことを示しています。system-time期間の開始時間はUPDATEの時間を記録することに注意してください。変更がデータベースに通知されて有効になるのはこの開始時間からだからです。

 eid ename  deptno                        sys_start                          sys_end
---- ------ ------ -------------------------------- --------------------------------
1002 Ash       888 2014-02-23 22:27:56.540000-08:00 9999-12-31 23:59:59.999999+00:00
1001 Sania     111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00
1004 Fred      555 2005-05-01 12:00:00.350000-08:00 9999-12-31 23:59:59.999999+00:00
1005 Alice     555 2005-05-01 12:00:00.450000-08:00 9999-12-31 23:59:59.999999+00:00

オープンおよびクローズ行を示すテンポラルSELECTは、元の行がまだテーブルに存在することを示しています。元の行はクローズされており、古い行のシステム時間の終了境界は変更時に設定されています。これはその行の値がデータベースで適用されたり、有効になることを終了した時間です。

SELECT * FROM employee_systime 
FOR SYSTEM_TIME BETWEEN TIMESTAMP'1900-01-01 22:14:02.820000-08:00' and CURRENT_TIMESTAMP 
WHERE ename=’Ash’;


 eid ename  deptno                        sys_start                          sys_end
---- ------ ------ -------------------------------- --------------------------------
1002 Ash       888 2014-02-23 22:27:56.540000-08:00 9999-12-31 23:59:59.999999+00:00
1002 Ash       333 2003-07-01 12:11:00.000000-08:00 2014-02-23 22:27:56.540000-08:00

このようにして、system-timeテーブルはテーブルの行への変更の詳細な履歴を維持しています。