例: NoPIテーブルとのHASH BYオプション - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vjt1596846980081.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

この例のために以下のNoPIテーブルを作成したとします。

     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))
     UNIQUE INDEX (o_orderkey),
     PARTITION BY COLUMN;
     CREATE TABLE orders_staging AS orders
     WITH NO DATA
     NO PRIMARY INDEX;

以下のINSERT ... SELECTリクエストは、o_orderkeyのハッシュ値ごとに行を再配置し、orders_stagingから選択されたデータが均等に配置され、ordersにローカルにコピーする前にo_ordertszについてランレングス圧縮がより向上するようローカルに整列されます。

     INSERT INTO orders
       SELECT *
       FROM orders_staging
       HASH BY o_orderkey
       LOCAL ORDER BY o_ordertsz;

HASH BY句の場合、o_orderkeyo_orderkeyテーブルのordersに解決されます。これは、orders_stagingからのo_orderkeyであるSELECTリクエストの選択式リストにおける最初の式に対応するため、データベースはo_orderkeyでSELECTリクエスト用に生成されたスプールを分散します。同様に、データベースはorders.staging.o_ordertszを使用して、ordersにローカルに挿入する前にスプールを整列します。

この例では同じテーブルを使用します。

     INSERT INTO orders
       SELECT o_orderkey, o_custkey, o_orderstatus, o_totalprice + 10,
              o_ordertsz, o_comment
       FROM orders_staging
       HASH BY o_totalprice;

HASH BY句の場合、o_totalpriceordersテーブルのo_totalpriceに解決されます。これはo_totalprice + 10であるSELECTリクエストの選択式リスト内で4つ目の式に対応するため、データベースはorders_staging.o_totalpriceの値でなく、この式の値についてSELECTリクエストに生成されたスプールを分散します。

orders_staging.o_totalpriceの値について分散するには、以前のINSERT ... SELECTリクエストの次の改訂が行なわれるときにHASH BY句で参照を修飾します。

     INSERT INTO orders
       SELECT o_orderkey, o_custkey, o_orderstatus, o_totalprice + 10,
              o_ordertsz, o_comment
       FROM orders_staging
       HASH BY orders_staging.o_totalprice;