17.10 - ALTER TABLEの結合インデックスの例 - 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
日本語 (日本)

例: 基本AMPインデックスとの結合インデックスに対し、列パーティションをROW形式に変更する

以下のテーブル定義を仮定します。

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);

結合インデックスを次のように作成します。

CREATE JOIN INDEX jOrders AS
    SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
      FROM Orders
  PRIMARY AMP INDEX (o_custkey)
  PARTITION BY COLUMN NO AUTO COMPRESS
    ALL BUT (o_salesperson AUTO COMPRESS);

列パーティションがROW形式になるように変更します。

ALTER TABLE jOrders ADD ROW(o_bill_addr);

これにより、結合インデックス定義が次のように生成されます。

CREATE JOIN INDEX jOrders AS
    SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
      FROM Orders
  PRIMARY AMP INDEX (o_custkey)
  PARTITION BY COLUMN NO AUTO COMPRESS
    ALL BUT (o_salesperson AUTO COMPRESS, ROW(o_bill_addr));

基本AMPインデックスとの結合インデックスに対し、列パーティションをAUTO COMPRESSに変更する

次のテーブル定義を想定します。

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);

基本AMPインデックスとの結合インデックスを作成します。

CREATE JOIN INDEX jOrders AS
    SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
      FROM Orders
  PRIMARY AMP INDEX (o_custkey)
  PARTITION BY COLUMN NO AUTO COMPRESS;

次のALTER TABLE文により、列パーティションの自動圧縮が追加されます。

ALTER TABLE jOrders ADD (o_salesperson) AUTO COMPRESS;

例: 自動圧縮を適用するための単一列の結合インデックスパーティションの変更

この例では、前述の例で使用したように、ordersテーブルで定義された結合インデックスに次の定義を使用します。システム デフォルトは、AUTO COMPRESSです。ただし、テーブル作成のリクエストで、列にNO AUTO COMPRESSを設定するようにデフォルトを上書きしています。

     CREATE JOIN INDEX j_orders AS
       SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
       FROM orders
     PARTITION BY COLUMN NO AUTO COMPRESS;

自動圧縮を適用するように、単一の列パーティションo_salespersonを変更します。

     ALTER TABLE j_orders 
       ADD (o_salesperson) AUTO COMPRESS;

このリクエストでは、列o_salespersonで構成される単一の列パーティションに自動圧縮が適用されるように変更することで、j_ordersの定義を変更しています。

     CREATE JOIN INDEX j_orders AS
       SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
       FROM orders
     PARTITION BY COLUMN NO AUTO COMPRESS ALL BUT
                                         (o_salesperson AUTO COMPRESS);

ここで、単一の列パーティションo_bill_addrを変更して、ROW記憶域形式が適用されるようにします。

     ALTER TABLE j_orders 
       ADD ROW(o_bill_addr);

このリクエストでは、j_ordersの定義を、次のように変更しています。

     CREATE JOIN INDEX j_orders AS
       SELECT ROWID AS rw, o_custkey, o_salesperson, o_bill_addr
       FROM Orders
     PARTITION BY COLUMN NO AUTO COMPRESS ALL BUT
                         (o_salesperson AUTO COMPRESS,
                                          ROW(o_bill_addr));