2バイトのパーティション プライマリ インデックスと同じように、Teradata Databaseは、パーティションCHECK制約を8バイト パーティションのパーティション式から導出します。
テーブル制約、パーティション制約、および名前付き制約に対して導出されるこのCHECK制約のテキストは16,000文字以下でなければなりません。
- 少なくとも1つのレベルのパーティション式が、BIGINTデータ型のRANGE_N関数によってのみ定義されている。
- 少なくとも1つのパーティション レベルのパーティション式で、ADD句が指定されている。
- テーブルまたは結合インデックスが8バイト パーティションを持っている。
- テーブルまたは結合インデックスが列パーティション化されている。
- データの入っているテーブルで、レベル1以外の少なくとも1つのパーティション レベルのパーティション数が、ALTER TABLE文で変更された。
- データの入っていないテーブルがALTER TABLE文で変更されたときに、レベル1以外の少なくとも1つのパーティション レベルのパーティション数が減少した。
8バイト パーティションによる複数レベル パーティションに対するこの形式のパーティションCHECK制約のテキストは、次のとおりです。これは、行パーティションと列パーティションの両方についてテーブルおよび結合インデックスに当てはまります。
CHECK ( /*nn bb cc*/ partitioning_constraint_1 [ AND partitioning_constraint_n ][...] )
ここで、nは、パーティション式に定義された最も高いパーティション レベルの数です。例えば、テーブルのパーティション式に18個のパーティション レベルがある場合、nは18です。パーティションCHECK制約では、18個のパーティション式が記述されます。
パーティションCHECK制約の個々のパーティション制約は、それぞれ、テーブルに対して定義された順番でパーティションのレベルに対応します。
説明
構文の要素 | 指定内容 |
---|---|
nn | パーティション レベルの数
|
bb | 内部パーティション番号を行ヘッダーに格納するために使用されるバイト数
|
cc | 列パーティション テーブルの列パーティション レベル。
|
partitioning_constraint_i | パーティション レベルiのパーティション式。
説明
|
ALTER TABLE文の詳細については、ALTER TABLE (テーブルの基本的なパラメータ)を参照してください。
以下の例では、Teradata Databaseが8バイト パーティションの場合に使用するパーティションCHECK制約の形式を示します。次のようなテーブルを作成します。
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_comment VARCHAR(79)) NO PRIMARY INDEX PARTITION BY (RANGE_N(o_custkey BETWEEN 0 AND 100000 EACH 1), COLUMN) UNIQUE INDEX (o_orderkey);
各パーティション レベルのパーティション数の積は100,000です(100,000 * 1)。これは65,535より大きいので、このテーブルは8バイト パーティションになります。この8バイト パーティションに対するテーブル レベルのパーティションCHECK制約テキストは次のとおりです。
CHECK (/*02 08 02*/ RANGE_N(o_custkey BETWEEN 0 AND 100000 EACH 1 /*1 100001+485440633518572409*/ IS NOT NULL AND PARTITION#L2 /*2 9+10*/=1)
次のSELECT文を使用すると、システム内で列パーティションを持つオブジェクトそれぞれについて、列パーティションのレベルを取得できます。
SELECT DBaseId, TVMId, ColumnPartitioningLevel (TITLE ‘Column Partitioning Level’) FROM DBC.TableConstraints WHERE ConstraintType = 'Q' AND ColumnPartitioningLevel >= 1 ORDER BY DBaseId, TVMId;
2バイト パーティションによるシングルレベルおよびマルチレベルのパーティション テーブルおよび結合インデックスに対してTeradata Databaseが作成するテーブル レベルのパーティションCHECK制約については、パーティション化されたテーブルのルールと使用上の注意および複数レベル パーティションの制限を参照してください。