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