17.00 - 17.05 - DATEまたはTIMESTAMPの組み込み関数を使用したパーティション式 - 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 Databaseは、DateTime式が有効な場所では、パーティション式のPERIOD列でBEGIN境界関数およびEND境界関数をサポートします。

ALTER TABLE TO CURRENT文を使って、更新可能な日付とタイムスタンプに基づきパーティション式を最適化して調整する方法については、更新可能日付式および更新可能タイムスタンプ式に基づくパーティション式を参照してください。

DATE条件を使用してクエリーを実行する予定のテーブルについてパーティション式を作成する場合は、次の指針に従います。
  • DATEパーティション式とともにRANGE_Nを使用します。以下に例を示します。
         PARTITION BY RANGE_N(date_column BETWEEN DATE '...'
                                          AND     DATE '...'
                                          EACH INTERVAL 's' t)
  • EACH句でINTERVAL制約を使用します。ここで、tは、DAY、MONTH、YEAR、またはYEAR TO MONTHです。
  • 例えば、のように、範囲にDATE定数を使用します。DATE '2003-08-06'。

    日付には、INTEGER制約またはCHARACTER制約を使用しないください。

    DATE定数は、次の理由から、よりよい選択と言えます。
    • 読込みが簡単で、範囲が数日にわたることが明確である。
    • FORMATにはあまり依存しない。
  • PARTITION BY salesdateなどのDATE列により、パーティションでは直感的に見える。

    構文エラーが返されることない。事実、非常に昔の日付でも正しく動作し、暗黙的変換のルールに従ってINTEGERパーティション番号を取得します。

    問題は、この方法でパーティション化されたテーブルが実用的ではない点です。

    代わりに、RANGE_NEACH INTERVAL'1'DAY を使用します。

  • PARTITION BY 7などを指定して、プライマリ インデックスの日付列が週ごとにパーティション化されることを示す方法は直感的に見えるかもしれませんが、この構文では構文エラーが返されます。

    代わりに、RANGE_NEACH INTERVAL'7'DAY を使用します。

  • 現在必要とする日付範囲に、翌日以降の数日をプラスした範囲を指定するようにしてください。このとき、次の問題点の均衡を図るようにします。
    • 現在必要としてる範囲のみに制限することで、最適化ルーチンは計画の見積もりをより正確に行なえます。また、プライマリ インデックスのアクセスがより効率的になり、パーティション列がプライマリ インデックス定義に含まれていない場合は結合されます。
    • 将来の範囲は、ALTER TABLE文(ALTER TABLE (テーブルの基本的なパラメータ)を参照)を使用したパーティションの追加および削除の頻度をできるだけ少なくするように定義します。

      ただし、パーティションの追加および削除作業を長期間行なわないと、正確なクエリー サポートが必要になったときに、追加および削除作業を忘れてしまうことがあります。