17.00 - 17.05 - 列パーティション テーブル - 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
日本語 (日本)

Teradata Columnarという語は、列パーティション化されたプライマリ インデックス(PI)、基本AMPインデックス(PA)、またはプライマリ インデックスなし(NoPI)を持つテーブルを示します。これらのテーブルは、列パーティション テーブルといいます。Teradata Columnarは、デフォルトでは無効にされており、これを有効にできるのはTeradataサポート担当者だけです。

Teradata Columnarによるパーティション化は、データベース設計の物理的な実装で、列パーティション化、カラムナ記憶領域、自動圧縮、および列パーティション テーブルに指定できるその他の機能をサポートするオプションを統合したものです。カラムナ記憶領域は、列パーティションのデータ値を一連のコンテナにパックすることにより、データの格納に必要な行ヘッダーの数を大幅に削減します。

列パーティションのデータは、従来の行記憶領域(ROWキーワードによって示された)またはカラムナ記憶領域(COLUMNキーワードによって示された)のいずれかを使用して、あるいはその両方を使用して格納できます。

列パーティション テーブルには、次の機能を定義できます。
  • TRANSACTIONTIME列、VALIDTIME列、またはその両方
  • フォールバック
  • セカンダリ インデックス
  • 結合インデックス
  • UNIQUE列制約
  • CHECK制約
  • PRIMARY KEY制約とFOREIGN KEY制約
  • 識別列
  • 列定義リストのAUTO COMPRESSまたはNO AUTOCOMPRESS
  • PARTITION BY句のAUTO COMPRESSまたはNO AUTOCOMPRESS
  • トリガー
  • BLOB列、CLOB列、XML列、ARRAY列、VARRAY列、UDT列、PERIOD列、地理空間列、および行レベル セキュリティ制約列。
    LOBには、行ハッシュ値あたり約64K行という制限があります。その理由は、列パーティション テーブルにはAMPあたりの行ハッシュ値が通常1つしかなく、型がBLOBまたはCLOBである列を含む列パーティション テーブルにはAMPあたり約64K行という制限があるためです。

列パーティション テーブルに永久ジャーナリングを定義することはできません。

次のテーブル タイプは、列パーティション テーブルとしては定義できません。
  • グローバル一時テーブル
  • 揮発テーブル
  • グローバル一時トレース テーブル
  • キュー テーブル
  • エラー テーブル
Teradata Columnarのデフォルト構文には、次のような機能が組み込まれています。
  • 列パーティション テーブルの場合、デフォルトのインデックス定義句では、NO PRIMARY INDEXが指定されます。

    DBS制御パラメータPrimaryIndexDefaultの設定は、このデフォルトに影響を与えません。

  • Teradata Databaseは、各列にその列専用の列パーティションを暗黙的に割り当てます。

    これは列パーティション値を格納するデフォルトの方法ですが、複数の列を1つの列パーティションに明示的にグループ化することもできます。

  • Teradata Databaseは、列パーティションを行形式で格納するか、列形式で格納するかを決めます。

    これは列パーティション値を格納するデフォルトの形式ですが、パーティションに対してCOLUMN形式またはROW形式を明示的に指定することもできます。

    さらに、同じ列パーティションに複数の列を割り当てることを、テーブルの列リストの中で、またはテーブルのパーティション式の中で定義できます。これを指定するには、同じ列パーティションの括弧文字の間に複数の列を区切ってグループ化します。

  • Teradata Databaseは、いくつかの種類の自動圧縮方式を暗黙的に検出して適用することにより、効率的にデータを格納します。自動圧縮方式は、それが物理行のサイズを縮小する場合にのみ適用されます。
    これは、デフォルトの圧縮オプションです。ただし、Teradata Databaseが列パーティションに自動圧縮の方式を暗黙的に割り当てないようにするために、明示的にNO AUTO COMPRESSを指定することもできます。

Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144の「CREATE TABLE」を参照してください。 列パーティション テーブルを作成するために使用する構文の詳細については、 列記憶領域は、列パーティションの値を一連のコンテナ(COLUMN形式を使って保存された列パーティション)または副行(ROW形式を使って保存された列パーティション)に入力します。 COLUMN形式は、保存されたコンテナごとに必要な行ヘッダーの数を大幅に減らします。

Teradata Columnarは以下の場合に最適です。
  • 述部または射影を評価するために、テーブルから列のサブセットにアクセスするI/Oパフォーマンスの改善。1つ以上の列のセットを個別の列パーティションに保存できるため、ストレージからアクセスする必要があるのは、クエリーで参照される列を含んだ列パーティションだけです。したがって、読み取られるデータ ブロックの数が大幅に減ります。
  • 最終的にデータ行の入るテーブルに対して適切なプライマリ インデックスをまだ定義していない場合のサンドボックス テーブル。

列パーティション テーブルの用途として想定されるのは、INSERT・・・SELECT文を使用してパーティションをロードした後(時おり小規模な保守作業を伴うことがある)、そのパーティションを使用してデータ マイニング分析を実行するというケースです。

分析作業やデータ マイニングが完了したら、テーブル全体を削除するか、個々の行パーティションをテーブルから削除することが想定されます。

この後、ステージング テーブルに行をコピーすることが想定されます。そして、列パーティション テーブルに挿入される新しいデータについて、同じシナリオを繰り返します。

このタイプのシナリオを、インサート ワンス シナリオと呼びます。列パーティション テーブルをOLTPアクティビティで使用することは意図されていません。

列パーティション テーブルの使用を最適化する方法の詳細については、列パーティション テーブルを使用する際の指針列パーティション テーブルのルールと制限、および列パーティション テーブルのパフォーマンスに関する問題を参照してください。

列パーティション テーブルは、次の3とおりの方法でパーティション化できます。
  • 列により
  • 行により
  • マルチレベル パーティションを使った列と行の組み合わせにより

列パーティションにより、クエリーの処理に必要な列に基づいて、列パーティションを排除することが可能になります。リクエストで必要とされない列を含む列パーティションは読み取る必要がないので、クエリーのパフォーマンスが大幅に向上します。

列パーティション化では、さらに、選択されたデータを列パーティションからDMLリクエストが効率的にアクセスできるため、クエリーのI/Oが大幅に削減されます。

次のSQL DML文を、列パーティション テーブルのデータの操作に使用できます。
  • DELETE
  • INSERT
  • SELECT
  • UPDATE
MERGE文はこのリストに含まれていません。MERGE文を使用して、列パーティション テーブルに行を挿入したり、データを更新したりすることはできません。これは、MERGE文を使用してテーブルにデータを挿入したり、データを更新したりするときにはターゲット テーブルのプライマリ インデックスが必要になるのに対して、列パーティション テーブルにはプライマリ インデックスがないからです。