列セットを新しい列パーティションとして追加します。データベース オブジェクトの命名については、<Teradata Vantage™ SQL基礎、B035-1141>を参照してください。対象のテーブルは列パーティション化されている必要があり、追加する列がすでに存在していてはいけません。結合インデックスを変更して、ALTER TABLEリクエストを使用して列または列パーティションを追加することはできません。column_nameまたはcolumn_nameグループに列ストレージ フォーマットを指定します。指定する列が含まれている列パーティションがCOLUMNフォーマットで定義されていない場合、その列パーティションをCOLUMNフォーマットを持つように変更します。COLUMNフォーマット、ROWフォーマット、またはSYSTEMフォーマットのいずれも指定せず、指定する列が含まれている列パーティションが次の場合、次のようになります。
- システム決定の形式を持たない列が含まれている場合、列パーティションは変更されず、最後に定義した形式が維持されます。
- システム決定の形式を持つ列が含まれている場合、システム定義の形式が維持されます。
変更された列パーティションにシステム決定の列パーティション形式を持つ列が含まれている場合、列パーティションは新たに該当する形式に変更されます(その形式を持たない場合)。
- data type
- 列のデータ型。
- column attributes
- 列の属性を指定します。
- AUTO COMPRESS
- 列のデータを自動圧縮します。
- NO AUTO COMPRESS
- 列のデータを自動圧縮しません。
例: テーブルへの2列パーティションの追加
この例では、例: テーブルへの単一列パーティションの追加で使用したバージョンのordersよりも多くの列を持つテーブル定義を使用しています。システム デフォルトは、AUTO COMPRESSです。すべてのALTER TABLE文で、同一の2列パーティション(o_ship_addr, o_bill_addr)をordersテーブルに追加しています。
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_comment VARCHAR(79), o_salesperson VARCHAR(5), o_ordersubstatus CHARACTER(1) CASESPECIFIC, o_comment_ext1 VARCHAR(79), o_comment_ext2 VARCHAR(79)) PARTITION BY COLUMN AUTO COMPRESS ALL BUT (o_ordersubstatus NO AUTO COMPRESS, (o_comment_ext1, o_comment_ext2) NO AUTO COMPRESS), UNIQUE INDEX(o_orderkey);
次の各ALTER TABLEリクエストは、すべて同一の2つの列パーティション(o_ship_addr、o_bill_addr)を、ユーザー定義のROW形式と自動圧縮を指定して表に追加します。
ALTER TABLE orders ADD ROW(o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200)) AUTO COMPRESS;
ALTER TABLE orders ADD ROW(o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200));
ALTER TABLE orders ADD (o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200));
ALTER TABLE orders ADD (o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200)) AUTO COMPRESS;
ALTER TABLE orders ADD (o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200)) NO AUTO COMPRESS;
ALTER TABLE orders ADD ROW(o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200)) NO AUTO COMPRESS;
ALTER TABLE orders ADD o_bill_addr VARCHAR(200) INTO o_ship_addr, ADD ROW(o_ship_addr);
この結果のテーブルは、次の テーブル定義になります。
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_comment VARCHAR(79), o_salesperson VARCHAR(5), o_ordersubstatus CHARACTER(1) CASESPECIFIC, o_comment_ext1 VARCHAR(79), o_comment_ext2 VARCHAR(79), o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200) ) PARTITION BY COLUMN AUTO COMPRESS ALL BUT (o_ordersubstatus NO AUTO COMPRESS, (o_comment_ext1, o_comment_ext2) NO AUTO COMPRESS, ROW(o_ship_addr, o_bill_addr)), UNIQUE INDEX(o_orderkey);
例: 基本AMPインデックスを持つテーブルへの2列パーティションおよび単一列パーティションの追加
デフォルトとして自動圧縮が適用される次のテーブル定義があるとします。
CREATE TABLE Orders ( o_orderkey INTEGER NOT NULL, o_custkey INTEGER, o_orderstatus CHAR(1) CASESPECIFIC, o_totalprice DECIMAL(13,2) NOT NULL, o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL, o_comment VARCHAR(79) ) PRIMARY AMP INDEX (o_orderkey), PARTITION BY COLUMN, UNIQUE INDEX (o_orderkey);
次のALTER TABLE文では、1番目のパーティションにユーザー指定のCOLUMN形式を使用し、2番目のパーティションにシステム決定のCOLUMN形式を使用し、デフォルトで自動圧縮を使用して、2列のパーティションと単一列のパーティションをテーブルに追加しています。
ALTER TABLE Orders ADD COLUMN(o_alt_ship_addr VARCHAR(500), o_alt_bill_addr VARCHAR(200)), ADD o_item_count INTEGER;
これにより、テーブル定義が次のように生成されます。
CREATE TABLE Orders ( o_orderkey INTEGER NOT NULL, o_custkey INTEGER, o_orderstatus CHAR(1) CASESPECIFIC, o_totalprice DECIMAL(13,2) NOT NULL, o_ordertsz TIMESTAMP(6) WITH TIME ZONE NOT NULL, o_comment VARCHAR(79), o_salesperson VARCHAR(5), o_ordersubstatus CHAR(1) CASESPECIFIC, o_comment_ext1 VARCHAR(79), o_comment_ext2 VARCHAR(79), o_ship_addr VARCHAR(500), o_bill_addr VARCHAR(200), o_alt_ship_addr VARCHAR(500), o_alt_bill_addr VARCHAR(200), o_item_count INTEGER ) PRIMARY AMP INDEX (o_orderkey) PARTITION BY ( COLUMN AUTO COMPRESS ALL BUT ( o_ordersubstatus NO AUTO COMPRESS, (o_comment_ext1, o_comment_ext2) NO AUTO COMPRESS, ROW(o_ship_addr, o_bill_addr) NO AUTO COMPRESS, COLUMN(o_alt_ship_addr, o_alt_bill_addr) ), UNIQUE INDEX (o_orderkey);