17.00 - 17.05 - 2バイト パーティションでパーティション化されたテーブルに対するパーティションCHECK制約 - 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は、パーティション化されたテーブルのパーティション式からテーブル レベルのパーティションCHECK制約を導出します。テーブル制約、パーティション制約、および名前付き制約に対して導出されるこの制約のテキストは、16,000文字以内にする必要があります。

次の図は、単一レベル パーティションに対して派生されたこのパーティションCHECK制約の2つの形式を示しています。形式は、パーティション式のデータ型がINTEGERかどうかによって異なります。
  • 1番目の形式は、INTEGERデータ型を持たず、RANGE_N関数だけで構成されてはいない、単一レベルの2バイト パーティション式に適用されます。

    このケースでは、式のデータ型をINTEGERにキャストする必要があります。

    CHECK (
      ( CAST ( partitioning_expression ) AS INTEGER )
    ) BETWEEN 1 AND max
  • 2番目の形式は、INTEGER型を持つ、シングルレベルの2バイト パーティション式に適用されます。
    CHECK ( partitioning_expression ) BETWEEN 1 AND max

    説明

    構文の要素 指定内容
    partitioning_expression 単一レベル パーティション式から返されるパーティション数。
    max partitioning_expressionで定義された最大パーティション数。
    • RANGE_N関数またはCASE_N関数以外のものでパーティション式を定義した場合、maxの値は65,535です。
    • RANGE_N関数またはCASE_N関数だけを指定してパーティション式を定義した場合、maxの値は、パーティション式によって定義されるパーティションの数です。

    シングルレベルおよびマルチレベルのパーティション プライマリ インデックス テーブルおよび結合インデックスに対してTeradata Databaseが作成する、テーブル レベルのパーティションCHECK制約の詳細については、パーティション化されたテーブルのルールと使用上の注意および複数レベル パーティションの制限を参照してください。

  • 3番目の形式は、複数レベルの2バイト パーティション式に適用されます。

    次の図は、2バイト パーティションのマルチレベル パーティション プライマリ インデックスに対してTeradata Databaseが導出する、このパーティションCHECK制約の形式を示しています。

    CHECK (
      /* nn */ partitioning_expression_1 IS NOT NULL
      AND partitioning_expression_2 IS NOT NULL
      [ partitioning_expression_n IS NOT NULL ] [...]
    )

    説明

    構文の要素 指定内容
    nn マルチレベル パーティションのレベルの数、またはパーティション式の数

    nnは02以上、15以下です。

    partitioning_expression_1 1番目のマルチレベル パーティション式から返されるパーティション数
    partitioning_expression_2 2番目のマルチレベル パーティション式から返されるパーティション数
    partitioning_expression_n the partition number returned by the n番目のマルチレベル パーティション式。

    パーティションに3つのレベルがある場合、暗黙的に指定される制約には3つのNOT NULLパーティション式が必要です。パーティションに10個のレベルがある場合、暗黙的に指定される制約には10個のNOT NULLパーティション式が必要です。以下、同様です。

例えば、以下のテーブルを作成するとします。

     CREATE TABLE orders (
       o_orderkey      INTEGER NOT NULL,
       o_custkey       INTEGER,
       o_orderstatus   CHARACTER(1) CASESPECIFIC,
       o_totalprice    DECIMAL(13,2) NOT NULL,
       o_orderdate     DATE FORMAT 'yyyy-mm-dd' NOT NULL,
       o_orderpriority CHARACTER(21),
       o_clerk         CHARACTER(16),
       o_shippriority  INTEGER,
       o_comment       VARCHAR(79))
     PRIMARY INDEX (o_orderkey)
     PARTITION BY (RANGE_N(o_custkey BETWEEN 0
                                     AND 49999
                                     EACH  100),
                   RANGE_N(o_orderdate BETWEEN DATE '2000-01-01'
                                       AND     DATE '2006-12-31'
                                       EACH INTERVAL '1' MONTH))
     UNIQUE INDEX (o_orderkey);

この2バイト パーティションによるマルチレベル パーティション プライマリ インデックスのDBC.TableConstraintsに格納されるパーティションCHECK制約のSQLテキストは、次のとおりです。

     CHECK (/*02*/ RANGE_N(o_custkey   BETWEEN 0
                                       AND 49999
                                       EACH  100)
                   IS NOT NULL
               AND RANGE_N(o_orderdate BETWEEN DATE '2000-01-01'
                                       AND     DATE '2006-12-31'
                                       EACH INTERVAL '1' MONTH)
                   IS NOT NULL )

次のSELECT文を使用すると、マルチレベル パーティション オブジェクトのそれぞれについてインデックスの制約情報を取得できます。

     SELECT *
     FROM DBC.TableConstraints
     WHERE ConstraintType = 'Q'
     AND   SUBSTRING(TableCheck FROM 1 FOR 13) >= 'CHECK (/*02*/'
     AND   SUBSTRING(TableCheck FROM 1 FOR 13) <= 'CHECK (/*15*/';