この例のために以下の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_orderkeyはo_orderkeyテーブルのordersに解決されます。これは、orders_stagingからのo_orderkeyであるSELECTリクエストの選択式リストにおける最初の式に対応するため、Teradata Databaseはo_orderkeyでSELECTリクエスト用に生成されたスプールを分散します。同様に、Teradata Databaseは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_totalpriceはo_totalpriceテーブルのordersに解決されます。これはo_totalprice + 10であるSELECTリクエストの選択式リスト内で4つ目の式に対応するため、Teradata Databaseは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;