例: 列パーティション テーブルからの行パーティションの削除
この例では、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を変更して、新しい列cとkを追加するようにするとします。順番に実行される以下の最初の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 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 p7 MODIFY NO PRIMARY INDEX NOT PARTITIONED;
CREATE TABLE p7 (a INTEGER, b INTEGER, c CHAR(10)) NO PRIMARY INDEX;