16.20 - 構文 - CREATE TABLE - 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>を参照してください。




標準データ型、列属性、インデックスおよびパーティションのオプション、その他の標準的なCREATE TABLE構文の詳細については、<Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。








NONTEMPORAL
(Copy Table構文のCREATE TABLE ASの場合のみ)すべてのtransaction-time値は、ソース テーブルからトランザクション時間を含むターゲット テーブルにコピーされることを指定します。

NONTEMPORAL

ターゲット テーブルにトランザクション時間が含まれていない場合、NONTEMPORAL接頭辞は無視されます。

MULTISET
重複行が許容されることを指定します。
テンポラル テーブルは、マルチセット テーブルでなければなりません。
GLOBAL TEMPORARY
一時テーブルの定義が作成され、将来の実体化のためにデータ ディクショナリに格納されます。
VOLATILE
揮発テーブルが作成されることを指定します。その定義は、それが定義されたセッションの間だけメモリ内に保存されます。
database_name.table_name
user_name.table_name
table_name
現行データベースと異なる場合、新しいテーブルの名前と、それが格納されるデータベースまたはユーザーの任意選択の名前。
create_table_option
従来型CREATE TABLE文のCreate Table Optionsリストにあるオプションを指定します。

列定義句

column_name
1つ以上の列の名前、この順序でそれらとその属性がテーブルに対して定義されます。
data_type column_attributes
列に格納されるデータの型と属性を定義する、1つ以上のデータ定義句を指定します。

データ型と列属性について、詳細はTeradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144を参照してください。

PERIODデータ型の詳細については、Teradata Vantage™ データ タイプおよびリテラル、B035-1143を参照してください。

列制約属性

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

CONSTRAINT name
制約のオプション名。
Transactiontimeオプションとvalidtimeオプションを一緒に使用する場合、任意の順序で指定し、ANDで区切ることができます。
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列として使用する場合、プライマリ インデックスに含めることはできません。

テーブル レベルの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列にすることはできません。

テーブル レベルのREFERENCES定義

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

CONSTRAINT name
制約のオプション名。
Transactiontimeオプションとvalidtimeオプションを一緒に使用する場合、任意の順序で指定し、ANDで区切ることができます。
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列にすることはできません。

テーブル レベルのCHECK定義

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

CONSTRAINT name
制約のオプション名。
Transactiontimeオプションとvalidtimeオプションを一緒に使用する場合、任意の順序で指定し、ANDで区切ることができます。
CURRENT TRANSACTIONTIME
トランザクション時間のオープン行に対してのみ、制約違反のチェックが行なわれます。
CURRENT VALIDTIME
有効時間の現在行および将来行に対してのみ、制約違反のチェックが行なわれることを指定します。履歴行に対するチェックは行なわれません。

これは、valid-time列に適用される制約のデフォルトのテンポラル修飾子です。

[SEQUENCED] VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれることを指定します。

これは、VALIDTIME制約のデフォルト タイプであり、CURRENT、SEQUENCED、またはNONSEQUENCED接頭辞なしでVALIDTIMEキーワードを指定した場合に適用されます。

NONSEQUENCED VALIDTIME
有効時間の履歴行、現在行、および将来行に対して、制約違反のチェックが行なわれることを指定します。NONSEQUENCED制約は、valid-time列を非テンポラル列として扱います。そのため、この制約は非テンポラル テーブルに対する制約と同じになります。これらはテーブルのすべてのオープン行に適用されます。
CHECK (boolean_condition)
ブール条件式が真になるように指定します。条件式が偽の場合、行はチェック制約違反になります。

チェック制約はvalid-time列またはtransaction-time列には設定できません。

テーブル レベルのNORMALIZE定義

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

NORMALIZE
行は指定されたPERIOD列に基づいて組み合わされ、派生PERIOD列を指定することができることを指定します。組み合わせされる行のその他のすべての列の値は、同じでなければなりません。組み合わされる行のPERIOD列の値は重なるか一致する必要があり、組み合わせ行の期間の集合である単一の期間にまとめられます。

正規化のPERIOD列は、派生PERIOD列にできます。

NORMALIZEをCREATE TABLE ASと共に使用することは有効ではありません。ただし、正規化テーブルをコピーしており、CREATE TABLE AS文にこれ以上列の指定がない場合、結果のテーブルのコピーは、元のように正規化されます。
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のデフォルトです。