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
日本語 (日本)

テーブルに対するDMLリクエストのロジックのうち相当数でDATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を指定している場合、そのようなクエリーを使用してアクセスする頻度が最も高いテーブルの行をパーティション化するために、更新可能日付および更新可能タイムスタンプによって提供される機能を利用することを検討してください。

パーティション プライマリ インデックスによって、Teradata Databaseがテーブルの行、または圧縮されていない結合インデックスを、テーブルのフル テーブル スキャンに頼ることなく行のサブセットに効率的にアクセスできるような方法でパーティション化します。パーティション式が、更新可能日付または更新可能タイムスタンプを使用して定義されている場合、最新の行を含むパーティションをできる限り狭く定義して、それらの行へのアクセスの効率を最適化できます。パーティションの更新可能日付または更新可能タイムスタンプの別のメリットとして、パーティション式を時間の関数として変更する必要がないように設計できるという点があります。

そのためには、テーブルまたは圧縮されていない結合インデックスのパーティション式でDATE、CURRENT_DATE、またはCURRENT_TIMESTAMP関数を指定して、それらの値の解決を定期的に更新できます。これにより、調整が必要だと判断したときに、いつでもDATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数の新しく解決された値で行を再パーティション化することができます。適切なALTER TABLE TO CURRENT文を実行することによって、パーティション スキーマの解決を更新できます。

更新可能な現在の日付または更新可能な現在のタイムスタンプ値を使用したテーブルまたは結合インデックスのパーティション化から最大のメリットを得るには、ALTER TABLE TO CURRENT文を使用して、最新の日付またはタイムスタンプ値にパーティションを定期的に調整する必要があります。ALTER TABLE TO CURRENTを参照してください。

日付定数またはタイムスタンプ定数が有効である場合に、パーティション式の任意の場所にDATE関数、CURRENT_DATE関数、およびCURRENT_TIMESTAMP関数を指定することができますが、ALTER TABLE TO CURRENT文を使用して、最適に調整できる方法でパーティションの定義を最適化するよう十分に注意する必要があります。

ALTER TABLE TO CURRENT文を使って新たに解決されたDATE、CURRENT_DATE、CURRENT_TIMESTAMP、またはCURRENT_DATE定数でパーティション化された行の調整に要するコストを最小限に抑えられるように、パーティション式の作成は慎重に行なってください。行の調整は、テーブルをスキャンして、調整の必要な行を特定するための時間、および行の移動または削除に必要な時間という点で高いコストがかかることがあります。

使用可能な最適化を利用することなくテーブルまたは圧縮されていない結合インデックスのかなりの比率の行を調整する必要がある場合、別の形式のパーティションの方がアプリケーションに適していることがあります。そのような最適化の例として、行パーティションの完全削除があります。

次のルールが、パーティション プライマリ インデックスにパーティション式を定義するために、DATE関数、CURRENT_DATE関数、およびCURRENT_TIMESTAMP関数を使用する際に適用されます。
  • 日付が有効なパーティション式の任意の場所に、DATE関数およびCURRENT_DATE関数を指定できます。

    タイムスタンプが有効なパーティション式の任意の場所に、CURRENT_TIMESTAMP関数を指定できます。

    ただし、RANGE_N関数では、テスト値の結果がTIMESTAMPデータ型であってはなりません。

  • SHOW TABLEリクエストまたはSHOW JOIN INDEX文によって生成されるレポートは、DATE、CURRENT_DATE、またはCURRENT_TIMESTAMPを使用してユーザーが指定したexpressionを含むユーザー指定のパーティション式を返し、解決された日付値またはタイムスタンプ値ではありません
    次のシステム ビューのいずれかを使用して、最後に解決されたDATE値またはCURRENT_DATE値、CURRENT_TIMESTAMP値、あるいはその両方を取得できます。
    • ResolvedDTSV
    • ResolvedDTSVX

      詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。

  • SHOWリクエストによって生成されるレポート(SHOW requestを参照)は、ユーザー指定のパーティション式を返します。

    SHOW QUALIFIEDリクエストによって生成されるレポートは、パーティション式で指定されたDATE、CURRENT_DATE、およびCURRENT_TIMESTAMPの最後に解決された日付およびタイムスタンプを返します。

  • 次の文は、DATE、CURRENT_DATE、またはCURRENT_TIMESTAMP関数を使用してRANGE_N関数を指定するパーティション式に当てはまります。
    パーティション式 ALTER TABLE文を使用できない対象
    シングルレベル パーティション式の範囲のADDまたはDROP
    マルチレベル パーティション式のレベルの範囲のADDまたはDROP

    代わりに、ALTER TABLE TO CURRENT文を使用して、そのような範囲をテーブルでADDまたはDROPする必要があります。ALTER TABLE TO CURRENTを参照してください。

  • CREATE TABLE … AS文を使用して新しいテーブルを作成する場合、次のルールが適用されます。
    • ソース テーブルのパーティションをDATE関数、CURRENT_DATE関数、またはCURRENT_TIMESTAMP関数を使用して定義し、新しいテーブルがソース テーブルおよびそのインデックス定義のコピーである場合、Teradata Databaseは、ソース テーブルから解決された日付とタイムスタンプを使用して、新しく作成されるテーブルをコピーします。
    • その他のすべての場合では、Teradata Databaseはターゲット テーブルのパーティション定義のDATE値、CURRENT_DATE値、またはCURRENT_TIMESTAMP値を、新しいテーブルの作成日付、作成タイムスタンプ、またはその両方に解決します。