16.20 - DELETE (ANSI system-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

目的

system-timeテーブルから1つ以上の行を削除します。

構文

system-timeテーブルで使用するときにDELETE文に特別な追加のテンポラル構文はありません。この構文は、非テンポラル テーブルに使用される構文と同一です。この構文については、SQLデータ操作言語

ANSI準拠

この文は、ANSI SQL:2011に準拠しています。

使用上の注意

  • DELETE文の構文はsystem-timeテーブルでも非テンポラル テーブルでも同じですが、効果は異なります。DELETEの結果として、system-timeテーブルから行が物理的に削除されることはないからです。
  • 行は、通常、system-timeテーブルから物理的に削除されることはないため、これらのテーブルに必要なストレージ容量は、行が削除されても減りません。クローズした行をsystem-timeテーブルから物理的に削除するには、テーブルからシステムのバージョン情報を削除します。これにより、クローズした行がすべてテーブルから自動的に削除されます。

    削除する前にクローズした行をアーカイブするために、INSERT ... SELECT操作でクローズした行を新しいテーブルにコピーして、その後、新しいテーブルをアーカイブすることができます。

例: ANSI System-Timeテーブルからの行の削除

次の例では、employee_systimeという名前の次のシステムのバージョン情報を含むsystem-timeテーブルにDELETE操作が適用されると仮定しています。

 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


クローズした行はすでにテーブルから削除されているため、さらに削除する対象とはなりません。削除できるのは、system-timeテーブルのオープン行だけです。オープン行は、現在修飾されていない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
1005 Alice     555 2005-05-01 12:00:00.450000-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
1001 Sania     111 2002-01-01 00:00:00.000000-08:00 9999-12-31 23:59:59.999999+00:00

DELETE FROM employee_systime WHERE ename=’Sania’;


簡単な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
1005 Alice     555 2005-05-01 12:00:00.450000-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



テーブル内のすべてのオープンおよびクローズ行を示すテンポラル問合わせにより、Sania行が論理的に削除されただけで、テーブル内でクローズ行として無効のまま残っていることがわかります。

SELECT * 
FROM employee_systime 
FOR SYSTEM_TIME FROM TIMESTAMP'1900-01-01 00:00:00.000001-08:00' TO 
CURRENT_TIMESTAMP;

 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 2014-02-22 22:32:01.540000-08: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


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