16.20 - 構文 - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1182-162K-JPN
<Teradata Vantage™ テンポラル テーブル サポート>では、特にテンポラル テーブルに関連する構文について説明します。必須ではない構文やテンポラル テーブルに固有ではない構文は、基本的にこのドキュメントには示されていません。その他の構文については、<Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>、<Teradata Vantage™ SQLデータ操作言語、B035-1146>、および<Teradata Vantage™ SQLデータ制御言語、B035-1149>を参照してください。




標準のデータ型、列属性、およびインデックスに関連する変更について、詳細は<Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。











NONTEMPORAL
変更対象のテーブルはトランザクション時間を含み、ALTER TABLE操作は、変更を行なう前の既存の行の履歴スナップショットを保存するのではなく、そのテーブル内のデータを変更します。
database_name.table_name
変更するテーブルの名前と、現行データベースと異なる場合、テーブルが含まれるデータベースまたはユーザーの任意選択の名前。
user_name.table_name
table_name
alter_table_option
従来型のALTER TABLE文のAlter Table Optionsリストにあるオプション。

列変更句

ADD column_name
指定された列と、その指定された属性を追加、または変更するために使用されます。
ADDおよびDROPを、同一のALTER TABLE文の中で、同一の列に対して指定することはできません。
ADDキーワードは、既存の列定義を変更するか、または新しい列をテーブルに追加します。指定された列がすでに存在する場合には、ADDは、その列の属性が変更されることを示します。
トランザクション時間を含むテーブルに対する列の追加または変更には、NONTEMPORAL接頭辞を含む文が必要です。
Data Type Column Attributes
列のデータを定義する1つまたは複数のデータ定義句。
新しく追加する列に対しては常にデータ型を指定する必要があります。データ型と列属性について、詳細はTeradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144を参照してください。
PERIODデータ型の詳細については、Teradata Vantage™ データ タイプおよびリテラル、B035-1143を参照してください。
DROP column_name [IDENTITY] [WITHOUT DELETE]
指定された列をテーブルから削除します。
トランザクション時間を含むテーブルに対する列の削除には、NONTEMPORAL接頭辞を含む文が必要です。
transaction-time列をテーブルから削除すると、すべてのクローズ行がテーブルから削除されます。
valid-time列をテーブルから削除すると、すべての非有効行がテーブルから削除されます。
IDENTITYオプションは、列からIDENTITY属性を削除しますが、列は削除しません。詳細については、<Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。
WITHOUT DELETEオプションを使用すると、トランザクション時間内に閉じられた行を削除せずに、テーブルからTRANSACTIONTIME列を削除できます。

列制約属性

制約の詳細については、テンポラル テーブルに対する制約の使用を参照してください。

CONSTRAINT name
制約のオプション名。
CURRENT TRANSACTIONTIME
トランザクション時間のオープン行に対してのみ、制約違反のチェックが行なわれます。
SEQUENCED TRANSACTIONTIME
子テーブルの制約列の値は、その値が子テーブルに存在する期間中は親テーブルに存在する必要があることを指定します。
SEQUENCED TRANSACTIONTIME制約の修飾子は、REFERENCES制約にのみ有効です。
NONSEQUENCED TRANSACTIONTIME
子テーブルの制約列のすべての値は、親テーブルに存在する必要があることを指定します。NONSEQUENCED制約は、非テンポラル関係制約と同様に、子テーブルのtransaction-time列を無視します。
親テーブルはtransaction-time列を持つことができません。NONSEQUENCED TRANSACTIONTIME制約の修飾子は、REFERENCES制約にのみ有効です。
CURRENT VALIDTIME
有効時間の現在行および将来行に対してのみ、制約違反のチェックが行なわれることを指定します。履歴行に対するチェックは行なわれません。
[SEQUENCED] VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれます。
NONSEQUENCED VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれることを指定します。NONSEQUENCED制約は、valid-time列を非テンポラル列として扱います。そのため、この制約は非テンポラル テーブルに対する制約と同じになります。これらはテーブルのすべてのオープン行に適用されます。
CHECK (boolean_condition)
ブール条件式が真になるように指定します。条件式が偽の場合、行はチェック制約違反になります。
チェック制約はvalid-time列またはtransaction-time列には設定できません。
UNIQUE
PRIMARY KEY
対象期間中はあらゆる時点でどの制約列内のどの値も1つの行内にしか存在できないことを指定します。
  • CURRENT制約では、期間が重なっている現在行または将来行が、各列内で同一の値を保持できないことを意味します。
  • SEQUENCED制約では、期間が重なっている履歴行、現在行または将来行が、各列内で同一の値を保持できないことを意味します。
  • NONSEQUENCED制約では、行の期間の重なりに関係なく、列の値が表内の各行で固有になることを意味します。これは、非テンポラル表の固有性制約またはプライマリキー制約と同じです。
いずれの場合も、表にtransaction-time列が含まれているときには、トランザクション時間のオープン行にのみ制約が適用されます。
valid-time表に対して、currentまたはsequencedのPRIMARY KEYまたはUNIQUE制約を定義する場合は、valid-time列をNOT NULLとして定義する必要があります。
PKまたはUNIQUEの各列に、valid-time列またはtransaction-time列を含めることはできません。
テンポラル表に対するPK制約と固有性制約は、システム定義の結合インデックス、または固有副次インデックスとして実装されるため、この制約によって表の副次インデックスの最大数を超過することになる場合には利用できません。
REFERENCES table_name [(column_name)]
プライマリキーと外部キー(または固有)の参照整合性制約。table_nameは親テーブルです。
この列をvalid-time列またはtransaction-time列にすることはできません。
WITH NO CHECK OPTION
指定したプライマリキーと外部キーの関係に参照整合性を強制しません。

テンポラル列定義

[AS] VALIDTIME
追加される列はvalid-time列になります。
valid-time列は、データ型がPERIOD(DATE)、PERIOD(TIMESTAMP[(n)])、またはPERIOD(TIMESTAMP[(n)] WITH TIME ZONE)の場合のみ追加できます。
テンポラル テーブルには、valid-time列は1つまでしか指定できません。
valid-time列を追加する場合は、既存のテーブルにUPIが含まれていてはいけません。また、固有性制約、プライマリキー制約、または参照整合性制約のいずれも含まれていてはいけません。
[AS] TRANSACTIONTIME
追加される列はtransaction-time列になります。
transaction-time列には、必ずPERIOD(TIMESTAMP(6) WITH TIME ZONE)のデータ型を含めます。
テンポラル テーブルには、transaction-time列は1つまでしか指定できません。
DEFAULT句を、transaction-time列に指定することはできません。
transaction-time列は、NOT NULLとして定義されなければなりません。
transaction-time列を追加する場合は、既存のテーブルにUPIが含まれていてはいけません。また、固有性制約、プライマリキー制約、または参照整合性制約のいずれも含まれていてはいけません。

派生PERIOD列の変更

derived_column
派生PERIOD列の名前。
(begin_column,end_column)
派生PERIOD列の開始境界値と終了境界値として使用するDateTime列の名前を指定します。列のデータ型は同じにする必要があり、どちらもNOT NULLとして定義されている必要があります。
valid-time列として機能する、派生PERIOD列に対して使用する開始境界列と終了境界列は、DATEまたはTIMESTAMP(n) WITH TIME ZONEのデータ型でなければなりません。ここで、nはタイムスタンプの精度であり、WITH TIME ZONEは任意です。
transaction-time列として機能する、派生PERIOD列に対して使用する開始境界列と終了境界列は、TIMESTAMP(6) WITH TIME ZONEのデータ型でなければなりません。
[AS] VALIDTIME [AS] TRANSACTIONTIME
派生PERIOD列がテンポラル テーブルのvalid-time列またはtransaction-time列として使用できることを指定します。
派生PERIOD列の開始列と終了列は、派生PERIOD列をvalid-time列またはtransaction-time列として使用する場合、プライマリ インデックスに含めることはできません。

制約変更のオプション

制約の詳細については、テンポラル テーブルに対する制約の使用を参照してください。

ADD DROP ADD/DROP CONSTRAINT name
制約を追加または削除するために使用されます。
名前付きのプライマリキー制約または固有性制約を削除すると、それに関連するシステム定義の結合インデックスまたはUSIが自動的に削除されます。
ALTER TABLEを使用して、名前付きでないプライマリキー制約または固有性制約を削除することはできません。代わりに、DROP JOIN INDEXを使用してシステム定義の結合インデックスを削除するか、DROP INDEXを使用してシステム定義の固有副次インデックスを削除します。

テーブル レベルのREFERENCES定義

制約の詳細については、テンポラル テーブルに対する制約の使用を参照してください。

CONSTRAINT name
制約のオプション名。
CURRENT TRANSACTIONTIME
子テーブルの制約列のすべての値は、親テーブルのオープン行に存在している必要があります。
SEQUENCED TRANSACTIONTIME
子テーブルの制約列の値は、その値が子テーブルに存在する期間中は親テーブルに存在する必要があります。
NONSEQUENCED TRANSACTIONTIME
子テーブルの制約列のすべての値は、親テーブルに存在する必要があることを指定します。NONSEQUENCED制約は、非テンポラル関係制約と同様に、子テーブルのtransaction-time列を無視します。
親テーブルはtransaction-time列を持つことができません。
CURRENT VALIDTIME
子テーブルの制約列のすべての値は、親テーブルのオープン現在行またはオープン将来行に存在している必要があることを指定します。子行のvalid-time期間は、子テーブルと一致する値を保持する親テーブルの現在行と将来行のvalid-time期間を組み合わせた範囲内に収まる必要があります。子テーブルの履歴行はチェックされず、親テーブルの履歴行は無視されます。
[SEQUENCED] VALIDTIME
子テーブルの制約列のすべての値は、親テーブルのオープン行に存在している必要があることを指定します。子行のvalid-time期間は、子テーブルと一致する値を保持する親テーブルのオープン行のvalid-time期間を組み合わせた範囲内に収まる必要があります。
NONSEQUENCED VALIDTIME
子テーブルの制約列のすべての値は、親テーブルに存在する必要があることを指定します。NONSEQUENCED制約は、非テンポラル関係制約と同様に、子テーブルのvalid-time列を無視します。
親テーブルはvalid-time列を持つことができません。
FOREIGN KEY
テーブルの外部キー。
column_name
外部キーの一部として定義された列の名前。
REFERENCES WITH NO CHECK OPTION
table_nameで指定した名前の親テーブルへの整合性参照。
指定したプライマリキーと外部キー(または固有)の関係に参照整合性を強制しません。
table_name
参照整合性制約の定義に使用する、参照先の親テーブルの名前。
column_name
親テーブルのPRIMARY KEYまたはUNIQUE候補キー列で構成される列セット内の列を指定します。この列をvalid-time列またはtransaction-time列にすることはできません。
DROP INCONSISTENT REFERENCES
テーブルに定義されている矛盾したすべての参照を削除します。

テーブル レベルのCHECK定義

制約の詳細については、テンポラル テーブルに対する制約の使用を参照してください。

CONSTRAINT name
制約のオプション名。
Transactiontimeオプションとvalidtimeオプションを一緒に使用する場合、任意の順序で指定し、ANDで区切ることができます。
CURRENT TRANSACTIONTIME
トランザクション時間のオープン行に対してのみ、制約違反のチェックが行なわれます。
CURRENT VALIDTIME
有効時間の現在行および将来行に対してのみ、制約違反のチェックが行なわれることを指定します。履歴行に対するチェックは行なわれません。
[SEQUENCED] VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれます。
NONSEQUENCED VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれることを指定します。NONSEQUENCED制約は、valid-time列を非テンポラル列として扱います。そのため、この制約は非テンポラル テーブルに対する制約と同じになります。これらはテーブルのすべてのオープン行に適用されます。
CHECK (boolean_condition)
ブール条件式が真になるように指定します。条件式が偽の場合、行はチェック制約違反になります。
チェック制約はvalid-time列またはtransaction-time列には設定できません。

テーブル レベルのUNIQUE定義

制約の詳細については、テンポラル テーブルに対する制約の使用を参照してください。

CONSTRAINT name
制約のオプション名。
Transactiontimeオプションとvalidtimeオプションを一緒に使用する場合、任意の順序で指定し、ANDで区切ることができます。
CURRENT TRANSACTIONTIME
トランザクション時間のオープン行に対してのみ、制約違反のチェックが行なわれます。
CURRENT VALIDTIME
有効時間の現在行および将来行に対してのみ、制約違反のチェックが行なわれることを指定します。履歴行に対するチェックは行なわれません。
[SEQUENCED] VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれます。
NONSEQUENCED VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれることを指定します。NONSEQUENCED制約は、valid-time列を非テンポラル列として扱います。そのため、この制約は非テンポラル テーブルに対する制約と同じになります。これらはテーブルのすべてのオープン行に適用されます。
UNIQUE
PRIMARY KEY
対象期間中はあらゆる時点でどの制約列内のどの値も1つの行内にしか存在できないことを指定します。
  • CURRENT制約では、期間が重なっている現在行または将来行が、各列内で同一の値を保持できないことを意味します。
  • SEQUENCED制約では、期間が重なっている履歴行、現在行または将来行が、各列内で同一の値を保持できないことを意味します。
  • NONSEQUENCED制約では、行の期間の重なりに関係なく、列の値が表内の各行で固有になることを意味します。これは、非テンポラル表の固有性制約またはプライマリキー制約と同じです。
いずれの場合も、表にtransaction-time列が含まれているときには、トランザクション時間のオープン行にのみ制約が適用されます。
valid-time表に対して、currentまたはsequencedのPRIMARY KEYまたはUNIQUE制約を定義する場合は、valid-time列をNOT NULLとして定義する必要があります。
PKまたはUNIQUEの各列に、valid-time列またはtransaction-time列を含めることはできません。
テンポラル表に対するPK制約と固有性制約は、システム定義の結合インデックス、または固有副次インデックスとして実装されるため、この制約によって表の副次インデックスの最大数を超過することになる場合には利用できません。
column_name
プライマリ キーまたは固有列として使用する列セット内の列を指定します。この列をvalid-time列またはtransaction-time列にすることはできません。

テーブル レベルのNORMALIZE定義

NORMALIZEオプションについて、詳細はTeradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144を参照してください。

NORMALIZE
行は指定されたPERIOD列に基づいて組み合わせされることを指定します。組み合わせされる行のその他のすべての列の値は、同じでなければなりません。組み合わせされる行のPERIOD列の値は重なるか一致する必要があり、組み合わせ行の期間の集合である単一の期間にまとめられます。
正規化のPERIOD列は、派生PERIOD列にできます。
ALL BUT (ignored_column_list)
正規化の目的で無視される列名または列名のカンマ区切りリストを指定します。テーブルの行が挿入または更新される場合、結果の無視された列の値は非確定的です。これらの値は、最近テーブルに追加された行からの値を反映しますが、正確な値を予測することはできず、必ず再現できるわけではありません。
トランザクション時間を持つテンポラル テーブルを正規化することはできますが、transaction-time列の値は固有であることがほとんどです。このため、transaction-time列がignored_column_listに含まれる場合を除き、テーブルのほとんどの行は正規化の対象となりません。
ON normalize_column
正規化されるPERIOD列または派生PERIOD列を指定します。これはtransaction-time列にすることはできませんが、valid-time列またはその他のPERIOD列にすることはできます。
正規化がトランザクション時間を持つテーブルで実行される場合、オープン行のみが正規化の対象となります。
ON OVERLAPS
正規化の条件として、結合する行の期間値が重なっている必要があることを指定します。ON OVERLAPS OR MEETSが、NORMALIZEのデフォルトです。
OR MEETS
正規化の条件として、結合する行の期間値が一致している必要があることを指定します。ON OVERLAPS OR MEETSが、NORMALIZEのデフォルトです。