16.20 - ADD COLUMN (column_name) - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)
列セットを新しい列パーティションとして追加します。データベース オブジェクトの命名については、<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_addro_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);