17.10 - 8バイト パーティションでパーティション化されたテーブルに対するパーティションCHECK制約 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

2バイトのパーティション プライマリ インデックスと同じように、Vantageは、パーティションCHECK制約を8バイト パーティションのパーティション式から導出します。

テーブル制約、パーティション制約、および名前付き制約に対して導出されるこのCHECK制約のテキストは16,000文字以下でなければなりません。

Vantageは、テーブルまたは結合インデックスのパーティション式について以下の条件のいずれか1つが当てはまる場合に、この形式のパーティションCHECK制約を使用します。
  • 少なくとも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 ][...] )
nn
パーティション レベルの数
2バイト パーティションでは、nnは01以上、15以下です。
8バイト パーティションでは、nnは01以上、62以下です。
bb
内部パーティション番号を行ヘッダーに格納するために使用されるバイト数
2バイト パーティションでは、bb = 02。
8バイト パーティションでは、bb = 08。
cc
列パーティション テーブルの列パーティション レベル。
列パーティション化されていないテーブルでは、cc = 00。
列パーティション テーブルでは、ccの範囲は01以上、nn以下。ここで、nnはテーブルのパーティション レベルの数。
partitioning_constraint_i
パーティション レベルiのパーティション式。
i
テーブルまたは結合インデックスのパーティション式のパーティショニング レベルであるiは、[1, nn]の範囲内にあります。Vantageは、iの値について先行ゼロを格納しません。
テーブルまたは結合インデックスがパーティション レベルiで行パーティション化されている場合、partitioning_constraint_iの形式は次のとおりです。
partitioning_constraint_i /*i d+a*/ IS NOT NULL
テーブルまたは結合インデックスがパーティション レベルiで列パーティション化されている場合、partitioning_constraint_iの形式は次のとおりです。
PARTITION#Li /*i d+a*/=1
d
パーティション レベル iで定義されているパーティションの数です。列パーティション レベルでは、この値には、内部使用のために予約された2つの列パーティションが含まれます。Vantageは、dの値について先行ゼロを格納しません。
a
パーティショニング レベルに追加できるパーティションの数(0の場合もあります)。Vantageがこの形式のパーティショニングCHECK制約を使用する場合、またはパーティショニング レベルがレベル1の場合、aの値はINTEGER値になります。Vantageは、aの値について先行ゼロを格納しません。
n
パーティション式に定義された最も高いパーティション レベルの数です。例えば、テーブルのパーティション式に18個のパーティション レベルがある場合、nの値は18です。パーティションCHECK制約では、18個のパーティション式が記述されます。

パーティションCHECK制約の個々のパーティション制約は、それぞれ、テーブルに対して定義された順番でパーティションのレベルに対応します。

ALTER TABLE文の詳細については、ALTER TABLE (テーブルの基本的なパラメータ)を参照してください。

以下の例では、Vantageが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バイト パーティションによるシングルレベルおよびマルチレベルのパーティション テーブルおよび結合インデックスに対してVantageが作成するテーブル レベルのパーティションCHECK制約については、パーティション化されたテーブルのルールと使用上の注意および複数レベル パーティションの制限を参照してください。