行を挿入する際のHASH BYまたはLOCAL ORDER BYの使用ルール - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage
次のルールが適用されます。
  • ターゲット テーブルまたは基礎となるターゲット ビュー テーブルが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句も指定していれば再配置後に整列式を使用します。最後の手順で、ターゲット テーブルまたは基礎となるターゲット ビュー テーブルに行をローカルに挿入します。

    ターゲット テーブルまたは基礎となるターゲット ビュー テーブルも列パーティション化されている場合、整列が実施される列で列パーティションをより効果的に自動圧縮できます。

  • データベースは、まずHASH BYハッシュ リストで指定された列参照を、ターゲット テーブルまたはビューの一致する列名に対応するサブクエリー式リスト内の選択式に解決します。一致する列が見つからないと、SELECTリクエストのORDER BY句の既存の列参照解決ルールに従って、サブクエリー内の結果または基礎となる列に解決します。