Hitachi

Hitachi Advanced Data Binder AP開発ガイド


5.10.2 SQLを実行した場合に作成される作業表について

次の表に示すSQLを実行した場合に作業表が作成されます。

重要

作業表の行長が最大行長を超えた場合,SQL文がエラーになります。作業表の最大行長については,マニュアルHADB システム構築・運用ガイドデータベースに関する最大値と最小値を参照してください。作業表の行長の求め方については,マニュアルHADB システム構築・運用ガイド作業表を格納するために必要な基本行用ページ数の求め方の変数ROWSZを参照してください。

表5‒11 作業表が作成されるSQL

項番

作業表が作成されるSQL

作業表の用途

作業表の構成列

作業表の種類

1

ORDER BY句を指定した場合

集合演算の結果をソートキーとする場合

検索結果のソート処理に使われます。

  • 問合せ式から導出される結果の列の値を格納するための列

ローカル作業表

問合せ指定の結果をソートキーとする場合

  • ORDER BY句のソートキーに指定した値式の結果を格納するための列

  • 実表の検索結果行に対する行IDを格納するための列(FROM句に実表を指定した場合)※1

  • 検索対象列の値を格納するための列(表の検索方式にキースキャンが適用される実表を,FROM句に指定した場合)

  • カラムストア表の検索対象列※11の値を格納するための列(FROM句にカラムストア表を指定した場合)

  • 導出表の問合せ式本体から導出された結果の列の値を格納するための列(FROM句に導出表を指定した場合)※6

  • ビュー定義の問合せ式から導出される結果の列の値を格納するための列(FROM句にビュー表を指定した場合)※6

  • WITH句の問合せ式本体から導出される結果の列の値を格納するための列(FROM句に問合せ名を指定した場合)※6

  • 表関数導出表に指定したシステム定義関数によって導出される結果の列の値を格納するための列(FROM句に表関数導出表を指定した場合)

  • 集まり導出表の結果の列の値を格納するための列(FROM句に集まり導出表を指定した場合)

  • スカラ関数RANDOMROWの結果の値を格納するための列(選択式にスカラ関数RANDOMROWを指定した場合)

2

GROUP BY句を指定した場合

グループ化の処理方式がグローバルハッシュグループ化の場合※2

グループ分けの結果を保持するために使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。

ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

  • 集合関数の結果を格納するための列

  • HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

グループ化の処理方式がローカルハッシュグループ化の場合※2

グループ分けのソート処理に使います。なお,この作業表は,ハッシュグループ化領域が不足した場合に使われます。ハッシュグループ化領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashgrp_area_sizeオペランドで指定します。

  • GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

  • 集合関数の引数に指定した列を格納するための列

  • 集合関数の結果を格納するための列

ローカル作業表

グループ化の処理方式がソートグループ化の場合※2

グループ分けのソート処理に使われます。

3

SELECT DISTINCTを指定した場合

SELECT DISTINCTの処理方式がハッシュ実行の場合※12

検索結果を保持するための処理に使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • 選択式の結果の列の値を格納するための列

  • HADBがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

SELECT DISTINCTの処理方式が作業表実行の場合※12

検索結果をソート,重複排除するための処理に使われます。

  • 選択式の結果の列の値を格納するための列

ローカル作業表

4

次のどれかの関数を指定した場合

  • DISTINCT集合関数

  • 逆分布関数

  • ORDER BY句を指定したARRAY_AGG集合関数

  • LISTAGG集合関数

グループ化の処理方式がグローバルハッシュグループ化の場合※2

重複排除された集合関数の入力値を保持するために使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • GROUP BY句のグループ化列に指定した値式の結果の値を格納するための列

  • ALL集合関数の引数に指定した列の値を格納するための列

  • DISTINCT集合関数の引数に指定した値式の結果を格納するための列

  • 逆分布関数のWITHINグループ指定のソートキーに指定した値式の結果を格納するための列

  • 逆分布関数MEDIANの引数に指定した値式の結果を格納するための列

  • LISTAGG集合関数の引数に指定した値式の結果を格納するための列

  • LISTAGG集合関数のWITHINグループ指定のソートキーに指定した値式の結果を格納するための列

  • ARRAY_AGG集合関数の引数に指定した値式の結果を格納するための列(ARRAY_AGG集合関数にORDER BY句を指定した場合)

  • ARRAY_AGG集合関数のORDER BY句のソートキーに指定した値式の結果を格納するための列

  • HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

グループ化の処理方式がグローバルハッシュグループ化以外の場合※2

集合関数の入力値を重複排除するための処理,または集合関数の入力値をソートするための処理に使われます。

5

ウィンドウ関数を指定した場合

ウィンドウ関数の結果を求めるためのソート処理に使われます。

  • FROM句に指定した表の列の値を格納するための列

  • 選択式に指定したウィンドウ関数の結果の値を格納するための列

ローカル作業表

6

FROM句に複数の表参照を指定した場合

表の結合方式がハッシュジョインの場合※3

表の結合処理で,結合対象となる表参照の結果を保持するために使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • FROM句に指定した表の列の値を格納するための列

  • HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

表の結合方式がネストループジョインの場合※3

表の結合処理で,結合対象となる表参照の結果を保持するために使われます。

グローバル作業表

7

導出表を指定した場合

導出表に対応する問合せ式本体の結果を保持するために使われます。

  • 導出表の問合せ式本体から導出される結果の列の値を格納するための列※6

グローバル作業表

8

ビュー表を指定した場合

ビュー表に対応する問合せ式の結果を保持するために使われます。

  • ビュー定義の問合せ式から導出される結果の列の値を格納するための列※6

グローバル作業表

9

WITH句を指定した場合

問合せ名に対応する問合せ式本体の結果を保持するために使われます。

  • WITH句中の問合せ式本体から導出される結果の列の値を格納するための列※6

グローバル作業表

10

表関数導出表を指定した場合

表関数導出表を導出するシステム定義関数の結果を保持するために使われます。

  • システム定義関数の結果の列の値を格納するための列

グローバル作業表

11

結合表を指定した場合

結合表の結果を保持するために使われます。

なお,結合表の結果を求めるための作業表については,項番6のFROM句に複数の表参照を指定した場合を参照してください。

  • 結合表の列の値を格納するための列

グローバル作業表

12

副問合せを指定した場合

副問合せの処理方式がハッシュ実行の場合※4

副問合せの結果を保持するために使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • 副問合せの選択式の結果の列の値を格納するための列

  • 副問合せに含まれる外への参照列の値を格納するための列※5

  • 副問合せに含まれる集合関数の結果を格納するための列

  • HADBサーバがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

副問合せの処理方式がハッシュ実行以外の場合※4

副問合せの結果を保持するために使われます。

  • 副問合せの選択式の結果の列の値を格納するための列

グローバル作業表

13

集合演算を指定した場合

集合演算の処理方式がハッシュ実行の場合※13

重複排除の結果を保持するために使われます。なお,この作業表は,ハッシュテーブル領域が不足した場合に使われます。ハッシュテーブル領域は,サーバ定義またはクライアント定義のadb_sql_exe_hashtbl_area_sizeオペランドで指定します。

  • 問合せ指定に指定した選択式の結果の列の値を格納するための列

  • HADBがハッシュ処理で使用する情報を格納するための列※9※10

  • ローカル作業表※7

  • グローバル作業表※8

集合演算の処理方式が作業表実行の場合※13

検索結果をソート,重複排除するための処理に使われます。

  • 問合せ指定に指定した選択式の結果の列の値を格納するための列

ローカル作業表

14

再帰的問合せの指定がある場合

アンカーメンバの結果,および再帰的メンバの結果を保持するために使われます。

  • 再帰的問合せの結果の列の値を格納するための列

グローバル作業表

注※1

行IDとは,行の格納位置を示す値のことをいいます。行IDのデータ型はCHAR(16)です。

注※2

グループ化の処理方式については,「5.7 グループ化の処理方式」を参照してください。

注※3

表の結合方式については,「5.5 表の結合方式」を参照してください。

注※4

副問合せの処理方式については,「5.6 副問合せの処理方式」を参照してください。

注※5

外への参照列については,マニュアルHADB SQLリファレンス副問合せの指定形式および規則を参照してください。

注※6

内部導出表の展開によって実表として扱われることがあります。内部導出表の展開については,マニュアルHADB SQLリファレンス内部導出表を参照してください。

注※7

ハッシュテーブル領域が不足した場合に,ハッシュテーブル領域に格納するデータを分割して格納する際に使用する作業表です。

注※8

ハッシュテーブル領域に格納するデータを作業表に格納したあと,さらにハッシュテーブル領域が不足した場合に,処理できなかったデータを格納する際に使用する作業表です。

注※9

HADBサーバがハッシュ処理で使用する情報を格納するための列のデータ型はINTEGER型になります。

注※10

ハッシュテーブル領域に格納するデータを作業表に格納したあと,さらにハッシュテーブル領域が不足した場合に,処理できなかったデータを格納する際に使用する作業表で作成される列です。

注※11

定義長が128バイト以上の列は,対象外になります。定義長が128バイト以上の列とは,次の列のことです。

  • 定義長が128バイト以上のCHARACTER型の列

  • 定義長が128バイト以上のVARCHAR型の列

  • 定義長が128バイト以上のBINARY型の列

  • 定義長が128バイト以上のVARBINARY型の列

注※12

SELECT DISTINCTの処理方式については,「5.9 SELECT DISTINCTの処理方式」を参照してください。

注※13

集合演算の処理方式については,「5.8 集合演算の処理方式」を参照してください。

SQLを実行した結果,作業表が作成されたかどうかを,アクセスパスで確認することができます。アクセスパスについては,次に示す個所を参照してください。