17.10 - ALTER TABLE MODIFYパーティション化の例 - 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-1144-171K-JPN
Language
日本語 (日本)

例: 列パーティション テーブルからの行パーティションの削除

この例では、ordersの行を削除し、行パーティションを削除するようテーブルを変更します。

     DELETE orders ALL;
     ALTER TABLE orders 
     MODIFY PARTITION BY COLUMN ALL BUT ((o_orderstatus,
                                          o_ordersubstatus),
                                          ROW(o_ship_addr, o_bill_addr) 
                                NO AUTO COMPRESS) ADD 3;

これにより、次の テーブル定義が生成されます。ADDオプションの値が増加していることに注意してください。ここでは、超過しているすべてのパーティションが、レベル1に割り当てられています。この変更のため、論理的には65,524個の列パーティションをテーブルに追加できます。ただし、1つのテーブルに対する列の最大数の制限に先に到達します。

     CREATE TABLE orders (
       o_orderkey       INTEGER NOT NULL,
       o_custkey        INTEGER,
       o_orderstatus    CHARACTER(1) CASESPECIFIC,
       o_totalprice     DECIMAL(13,2) NOT NULL,
       o_ordertsz       TIMESTAMP(6) WITH TIME ZONE NOT NULL,
       o_salesperson    VARCHAR(5),
       o_ordersubstatus CHARACTER(1) CASESPECIFIC,
       o_ship_addr      VARCHAR(500),
       o_bill_addr      VARCHAR(200),
       o_item_count     INTEGER )
     PARTITION BY COLUMN ALL BUT ((o_orderstatus, o_ordersubstatus)
                  ROW(o_ship_addr, o_bill_addr) NO AUTO COMPRESS)
                  ADD 65524;

例: 列パーティション テーブルへの列の追加と削除

次のat3という列パーティション テーブルを作成するとします。

     CREATE TABLE at3 (
       a INTEGER, 
       b INTEGER, 
       c INTEGER,
       d INTEGER,
       e INTEGER,
       f INTEGER) 
     PARTITION BY COLUMN ((a, b), f, (d, e), c);

at3を作成した後で、列cを削除して、新しい列gで置き換えます。

次の4つの同等のALTER TABLE文のいずれも、この変更をat3に加えることができます。

     ALTER TABLE at3 DROP c, ADD g INTEGER INTO c;
     ALTER TABLE at3 ADD g INTEGER INTO c, DROP c;
     ALTER TABLE at3 DROP c, ADD g INTEGER;
     ALTER TABLE at3 ADD g INTEGER, DROP c;

上記の最初の2つの例でのINTO句の使用に注意してください。追加される列または列のグループにINTO句を指定すると、追加しようとしている列セットは、列名によってINTO句に指定されている列を含む列パーティションに追加されます。これらの例はいずれも、列cを含むパーティションに新しい列gを追加します。

前述のALTER TABLEリクエストは、at3に対して次の新しい定義を生成します。

     CREATE TABLE at3 (
       a INTEGER, 
       b INTEGER, 
       d INTEGER,
       e INTEGER, 
       f INTEGER, 
       g INTEGER)
     PARTITION BY COLUMN ((a, b), (d, e), f, g);

at3を変更した後で、既存の列dおよびeを削除し、同じ列パーティション内に含まれる新しい列iおよびhで置き換えることにします。

次の6つの同等のALTER TABLEリクエストのいずれも、この変更をat3に加えることができます。

     ALTER TABLE at3 DROP d, DROP e, ADD h INTEGER INTO d, ADD i INTEGER INTO e; 
     ALTER TABLE at3 ADD h INTEGER INTO e, DROP d, DROP e, ADD i INTEGER INTO d;
     ALTER TABLE at3 ADD h INTEGER INTO d, DROP d, ADD i INTEGER INTO e, DROP e;
     ALTER TABLE at3 DROP d, DROP e, ADD (h INTEGER, i INTEGER) INTO e;
     ALTER TABLE at3 DROP d, DROP e, ADD (h INTEGER, i INTEGER);
     ALTER TABLE at3 ADD (h INTEGER, i INTEGER), DROP d, DROP e;

上記の最初の4つの例のINTO句の使用に注意してください。

前述のALTER TABLE文は、at3に対して次の新しい定義を生成します。列dおよびeはこの定義から除外され、列hおよびiが追加されていることに注意してください。

     CREATE TABLE at3 (
       a INTEGER, 
       b INTEGER, 
       f INTEGER, 
       g INTEGER,
       h INTEGER,
       i INTEGER)
     PARTITION BY COLUMN ((a, b), f, g, (h, i));

テーブルat3を変更して、新しい列ckを追加するようにするとします。順番に実行される以下の最初の2つのALTER TABLE文か、または3番目のALTER TABLE文が、この変更をat3に加えることができます。

     ALTER TABLE at3 ADD c INTEGER;

     かつ

     ALTER TABLE at3 ADD k INTEGER INTO c;

     または

     ALTER TABLE at3 ADD (c INTEGER, k INTEGER);

前述のALTER TABLEリクエストは、at3に対して次の新しい定義を生成します。

     CREATE TABLE at3 (
       a INTEGER, 
       b INTEGER,
       c INTEGER,
       f INTEGER, 
       g INTEGER
       h INTEGER, 
       i INTEGER,
       k INTEGER)
     PARTITION BY COLUMN ((a, b), f, g, (h, i), (c, k));

例: プライマリ インデックス列パーティション テーブルを非パーティション テーブルまたはプライマリ インデックス非パーティション テーブルに変更する

この例では、次のテーブル定義を使用します。
CREATE TABLE pi6 (a INTEGER, b INTEGER, c CHAR(10))
  PRIMARY INDEX (a) PARTITION BY COLUMN;
空のテーブルに対し次のいずれかのALTER TABLE文を実行します。
ALTER TABLE pi6 MODIFY NOT PARTITIONED;
ALTER TABLE pi6 MODIFY PRIMARY INDEX NOT PARTITIONED;
ALTER TABLE pi6 MODIFY PRIMARY INDEX(a) NOT PARTITIONED;
次のテーブル定義の結果:
CREATE TABLE pi6 (a INTEGER, b INTEGER, c CHAR(10)) PRIMARY INDEX (a);

例: プライマリ インデックス列パーティション テーブルを非プライマリ インデックス非パーティション テーブルに変更する

この例では、次のテーブル定義を使用します。
CREATE TABLE p7 (a INTEGER, b INTEGER, c CHAR(10))
  PRIMARY INDEX (a) PARTITION BY COLUMN;
空のテーブルに対し次のALTER TABLE文を実行します。
ALTER TABLE p7 MODIFY NO PRIMARY INDEX NOT PARTITIONED;
次のテーブル定義の結果:
CREATE TABLE p7 (a INTEGER, b INTEGER, c CHAR(10)) NO PRIMARY INDEX;