プライマリ インデックスが定義されておらず、列パーティション化されていないテーブル(パーティション化されていないNoPIテーブルと呼ばれる)は、一般に、次の2つの理由でのみ使用されます。
- FastLoadおよびTeradata Parallel Data Pumpの配列INSERTのロード操作のためのステージング テーブルとして。詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
データがこれらのテーブルにロードされたら、INSERT … SELECT、MERGE、またはUPDATE … FROMを使用して、コピー先のプライマリ インデックス テーブルに行をコピーできます。また、INSERT … SELECT文およびUPDATE文を使用して、プライマリ インデックスの定義されたソース テーブルの行をNoPIターゲット テーブルにコピーすることもできます(MERGE文ではコピーできません)。
- 一時的に保持しているテーブルまたはサンドボックスなどのテーブルに対して、適切なプライマリ インデックスが定義されていない場合は、最終的に値が入力されます。
NoPIテーブルには次の2つのタイプがあります。
- パーティション化されていないNoPIテーブル(このトピックで説明しているもの)
- 列パーティション テーブル(列パーティション テーブルで説明)。
次のSQL DML文は、複数のパーティション化されていないNoPIテーブル データの操作に使用できます。
- DELETE
- INSERT
- SELECT
- UPDATE
パーティション化されていないNoPIテーブルには、以下の制限があります。
- パーティション化されていないNoPIテーブルをSETテーブルとして作成することはできません。
すべてのセッション モードにおいて、パーティション化されていないNoPIテーブルのデフォルト テーブル タイプをMULTISETに変更することはできません。
- NO PRIMARY INDEXの指定内容に従う列名リストは指定できません。
- CREATE TABLE文でPRIMARY INDEX(column_list)またはNO PRIMARY INDEXを指定せずにテーブルを作成する場合、作成されるテーブルにプライマリ インデックスが存在するかどうかは、PRIMARY KEY制約またはUNIQUE制約が列の任意のに指定されているかどうかと、DBS制御パラメータPrimaryIndexDefaultの設定によって異なります。詳細と例外については、<Teradata Vantage™ - データベースの設計、B035-1094>および<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。
PrimaryIndexDefaultのデフォルト設定はDです。明示的なPRIMARY INDEXオプションまたはNO PRIMARY INDEXオプションのいずれも指定しない場合は、Teradata Databaseが宣言したPRIMARY KEYでUPIを作成し、いずれも存在しない場合は、UNIQUE属性を使用して定義された最初の列で作成します。何も検出されない場合、Teradata Databaseは定義されているインデックスに適した最初の列にNUPIがあるテーブルを作成します。
- 非パーティションNoPIテーブルには、パーティション化するプライマリ インデックスを含めることができないため、このテーブルのプライマリ インデックスのパーティションを指定することはできません。ただし、NoPIテーブルには列パーティションを定義できます。列パーティション テーブルを参照してください。
- パーティション化されてないNoPIテーブルは、永久ジャーナルを持つことができません。
- パーティション化されていないNoPIテーブルは、識別列を持つことができません。
- ハッシュ インデックスをパーティション化されていないNoPIテーブルに指定することはできません。その理由は、ハッシュ インデックスは基礎となる基本テーブルのプライマリ インデックスを継承するのに対して、パーティション化されていないNoPIテーブルにはプライマリ インデックスがないからです。
- SQL MERGE文で、パーティション化されていないNoPIテーブルまたは列パーティション ターゲット テーブルを更新またはデータを挿入することはできません。
SQL MERGE文は、非パーティション ソース テーブルまたは列パーティション ソース テーブルからプライマリ インデックス ターゲット テーブルを更新したり、データを挿入したりすることができます。
- MultiLoadユーティリティを使用してパーティション化されていないNoPIテーブルおよび正規化されたテーブルに行をロードすることはできません。パーティション化されていないNoPIテーブルには、FastLoadユーティリティ(正規化されたNoPIテーブルは除く)、Teradata Parallel Data Pumpの配列INSERT操作、およびINSERT … SELECT文を使用して行をロードできます。
非パーティションNoPIテーブルには、次のすべての機能を定義できます。
- TRANSACTIONTIME列、VALIDTIME列、またはその両方
- フォールバック
- セカンダリ インデックス
- 結合インデックス
- UNIQUE列制約
- CHECK制約
- PRIMARY KEY制約とFOREIGN KEY制約
- トリガー
- BLOB列、CLOB列、ARRAY列、VARRAY列、UDT列、PERIOD列、地理空間列、および行レベル セキュリティ制約列LOBには、行ハッシュ値あたり約64K行という制限があります。その理由は、パーティション化されていないNoPIテーブルにはAMPあたりの行ハッシュ値が通常1つしかなく、型がBLOBまたはCLOBである列を含むパーティション化されていないNoPIテーブルにはAMPあたり約64K行という制限があるためです。
次のテーブル タイプは、パーティション化されていないNoPIテーブルとして定義できます。
- パーティション化されていない実データ テーブル
- グローバル一時テーブル
- 揮発テーブル
- キュー テーブル(CREATE TABLE(キュー テーブル形式)を参照)。
- エラー テーブル(CREATE ERROR TABLEを参照)。
次のテーブル タイプは、パーティション化されていないNoPIテーブルとして定義できません。