5.12.4 アーカイブマルチチャンク表を検索するSQL文の等価変換
次に示す条件をすべて満たす場合,アーカイブマルチチャンク表を検索するSQL文はHADBサーバによって自動的に変換(等価変換)されます。
-
アーカイブされているデータを検索する場合
-
WHERE句の探索条件にアーカイブレンジ列を指定した条件を指定している場合
-
WHERE句に指定した探索条件が,「5.12.2 アーカイブレンジ列の日時情報を使用した検索範囲の絞り込み」で説明している規則を満たしている場合
- メモ
-
-
等価変換後のSQL文が,アクセスパスの情報に出力されます。
-
等価変換後のSQL文に対してSQL文の規則が適用されます。
-
等価変換の例を次に示します。
- 指定したSELECT文の例
-
SELECT * FROM "ARCHIVE-T1" WHERE "RECORD-DAY" BETWEEN DATE'2015/11/01' AND DATE'2016/01/31' AND "C1"='P001'
- SELECT文による検索範囲
- 等価変換されたSELECT文の例
-
SELECT * FROM (SELECT * FROM "ARCHIVE-T1" ...1 UNION ALL ...2 SELECT * FROM ...3 TABLE (ADB_CSVREAD(MULTISET( ...4 SELECT "ARCHIVE_FILE_NAME" FROM "HADB"."LOCATION_TABLE_00020191" AS "LOC" ,"HADB"."STATUS_CHUNKS" AS "SCK" WHERE "RANGE_MAX" >= DATE'2015/11/01' ...5 AND "RANGE_MIN" <= DATE'2016/01/31' ...5 AND "SCK"."TABLE_SCHEMA" = 'ADBUSER01' AND "SCK"."TABLE_NAME" = 'ARCHIVE-T1' AND "SCK"."CHUNK_ID" = "LOC"."CHUNK_ID" AND "SCK"."CHUNK_STATUS" IS NULL ) ,'中略') ) AS "TBLFUNC_00020191" ("C1" VARCHAR(10), "C2" INT, "RECORD_DAY" DATE) ...6 ) WHERE "RECORD_DAY" BETWEEN DATE'2015/11/01' AND DATE'2016/01/31' AND "C1"='P001'
- [説明]
-
この例では,アーカイブされているデータと,アーカイブされていないデータを検索しています。この例では,アーカイブされているデータを検索する問合せと,アーカイブされていないデータを検索する問合せに書き換えられ,この2つの問合せの和集合(UNION ALL)を求めています。
-
アーカイブされていないデータを検索する問合せです。
-
1.と3.の問合せの和集合(UNION ALL)を求めています。
-
アーカイブされているデータを検索する問合せです。
-
ADB_CSVREAD関数に変換されて,アーカイブされているデータが格納されているアーカイブファイルを読み込んでいます。
-
WHERE句に指定した探索条件を基に,ロケーション表を検索する探索条件に書き換えています。※
-
TBLFUNC_00020191は,表関数導出表の相関名です。相関名は次の規則に従って決定されます。
TBLFUNC_nnnnnnnn
nnnnnnnn:アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列(0〜9,A〜F)
-
- 注※
-
ロケーション表を検索する探索条件に書き換える例を次に示します。
(例1)
(例2)
-
RANGE_MAX
ロケーション表の列です。アーカイブファイルごとのアーカイブレンジ列の値の最大値が格納されています。
-
RANGE_MIN
ロケーション表の列です。アーカイブファイルごとのアーカイブレンジ列の値の最小値が格納されています。
-
- メモ
-
アーカイブマルチチャンク表を検索するSQL文の等価変換によって生成された内部導出表は,展開の対象になりません。内部導出表の展開については,マニュアルHADB SQLリファレンスの内部導出表を参照してください。