- ターゲット テーブルまたは基礎となるターゲット ビュー テーブルがNoPIテーブルである場合は、HASH BY句を指定することができます。テーブルにプライマリ インデックスまたはプライマリAMPインデックスが含まれている場合、セッション モードに応じてエラーまたは障害メッセージが返されます。
- HASH BY句を指定しないと、システムはターゲットNoPIテーブルへ挿入する前にソース行を再配置しません。
NoPIターゲット テーブルにソース テーブルとは異なる行パーティション化がある場合、システムは内部パーティション番号でソース行をローカルにソートし、ローカルに行をターゲット テーブルにコピーします。内部パーティション番号は、ターゲット テーブルの行パーティション化に基づいて計算されます。
- ハッシュ リストでHASH BY句を指定すると、システムはまず選択した行をハッシュ リストに基づくハッシュ値により再配置します。
LOCAL ORDER BY句も指定する場合、またはターゲット テーブルが行パーティション化されている場合、システムはローをローカルに整列し、ターゲット テーブルまたは基礎となるターゲット ビュー テーブルにローカルに挿入します。
これは、Subqueryの結果、行が均等に再配置されなかった場合に便利です。ターゲット テーブルまたは基礎となるターゲット ビュー テーブルも列パーティション化されていれば、ローカルに整列されたハッシュ再配置も、同等の列の値を同じAMPに分散するのに便利です。それにより、ハッシュ値が計算される列で列パーティションを効果的に自動圧縮できます。
HASH BY句に指定するオブジェクトは式であるため、式をRANDOM (n, m)などの関数呼び出しにすることができます。
HASH BY RANDOM(1, 2000000000)は、行をハッシュ分散するための特定の列セットがない場合、およびHASH BY RANDOM句よりも均等な配置が求められる場合に、個々に選択された各行の再配置に便利です。
ハッシュ式を適切に選択しないと、プライマリ インデックス列に選択を誤った場合と同様に、配置が非常に不均等になります。
- HASH BY RANDOM句を指定すると、システムはまず選択した行のデータ ブロックをランダムに再配置します。
LOCAL ORDER BY句も指定すると、システムは行をローカルに整列し、ターゲット テーブルまたは基礎となるターゲット ビュー テーブルにローカルに挿入します。
これは、サブクエリーの結果、行が均等に再配置されなかった場合に便利です。 再配置されたデータ ブロックは、個々の行を配置するよりも効率的で、通常はほぼ均等な配置となります。ただし、HASH BY RANDOM(1,2000000000)のような式を使用して各行を配置すると、行をより均等に配置できます。これは、一部の場合では必要です。
- ターゲット テーブルまたは基礎となるターゲット ビュー テーブルがPI、PA、またはNoPIテーブルの場合、LOCAL ORDER BY句を指定できます。LOCAL ORDER BY句を指定しターゲット テーブルが行パーティション化されていると、システムは、ターゲット テーブルの列パーティションに基づいて計算された内部パーティション番号にしたがって、選択された行をローカルに整列します。(ターゲット テーブルまたは基礎となるターゲット ビュー テーブルが列パーティション化されていれば)列パーティション番号(あれば)は、1となります。行パーティション化されていればターゲット テーブルまたは基礎となるターゲット ビュー テーブルのパーティション化を使用し、HASH BY句も指定していれば再配置後に整列式を使用します。最後の手順で、ターゲット テーブルまたは基礎となるターゲット ビュー テーブルに行をローカルに挿入します。
ターゲット テーブルまたは基礎となるターゲット ビュー テーブルも列パーティション化されている場合、整列が実施される列で列パーティションをより効果的に自動圧縮できます。
- Teradata Databaseは、まずHASH BYハッシュ リストで指定された列参照を、ターゲット テーブルまたはビューの一致する列名に対応するサブクエリー式リスト内の選択式に解決します。一致する列が見つからないと、SELECTリクエストのORDER BY句の既存の列参照解決ルールに従って、サブクエリー内の結果または基礎となる列に解決します。
次のルールが適用されます。