17.00 - 17.05 - パーティション化されていないNoPIテーブル - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-170K-JPN
Language
日本語 (日本)
プライマリ インデックスが定義されておらず、列パーティション化されていないテーブル(パーティション化されていない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テーブルとして定義できます。
  • パーティション化されていない実データ テーブル
  • グローバル一時テーブル
  • 揮発テーブル

次のテーブル タイプは、パーティション化されていないNoPIテーブルとして定義できません。