ANSI二重テンポラル テーブルの行パーティション化 - 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

問合わせのパフォーマンスを高めるには、テンポラル テーブルの行をパーティション化する必要があります。パーティション化すると、テーブルの行を現在行、履歴行、オープン行、およびクローズ行に論理的にグループ化できます。二重テンポラル テーブルの場合、現在行とオープン行に対する問合わせは、これらの行を含むパーティションに自動的に送信されます。

テンポラル テーブルに列パーティション化を適用することもできますが、ここで説明する行パーティション化が、テンポラル テーブルに使用されるパーティション化のタイプの1つとして必ず構成される必要があります。

例: ANSI valid-timeテーブルの行パーティション化

valid-timeテーブルを行パーティション化するには、次のPARTITION BY句を使用します。

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,
 PERIOD FOR job_dur (job_start,job_end) AS VALIDTIME,
 sys_start TIMESTAMP(6) WITH TIME ZONE NOT NULL 
           GENERATED ALWAYS AS ROW START,
 sys_end TIMESTAMP(6) WITH TIME ZONE NOT NULL 
           GENERATED ALWAYS AS ROW END,
 PERIOD FOR SYSTEM_TIME(sys_start,sys_end)
 )
 PRIMARY INDEX (eid) 
 PARTITION BY CASE_N (
  (END(job_dur) >= CURRENT_DATE AT INTERVAL -'12:59' HOUR TO MINUTE)
    AND END(SYSTEM_TIME) >= CURRENT_TIMESTAMP,
  END(job_dur) < CURRENT_DATE AT INTERVAL -'12:59' HOUR TO MINUTE
   AND END(SYSTEM_TIME) >= CURRENT_TIMESTAMP,
  END(SYSTEM_TIME) < CURRENT_TIMESTAMP
  )
WITH SYSTEM VERSIONING;


注意

  • パーティション式にはsys_endの代わりにEND(SYSTEM_TIME)job_endの代わりにEND(job_dur)を使用できます。
  • WITH SYSTEM VERSIONINGはCREATE TABLE文の最後の句として使用する必要があります。

現在パーティションの保守

時間の経過とともに現在行は履歴行になるので、ALTER TABLE TO CURRENT文を定期的に使用して、現在パーティションの履歴行を履歴パーティションに移動する必要があります。ALTER TABLE TO CURRENTではパーティション式を再度解決します。これにより、各行は最新のパーティション式でそれぞれに適したパーティションに移動されます。以下に例を示します。

ALTER TABLE  temporal_table_name  TO CURRENT;

この文では、表に定義されたプライマリキーと固有性制約のために自動的に作成される、システム定義の結合インデックスも更新します。