Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.16.1 マルチ集合値式の指定形式および規則

マルチ集合値式は,複数の要素値を1つに集めたデータ集合を求める際に使用します。マルチ集合値式は,次の個所に指定できます。

〈この項の構成〉

(1) 指定形式

マルチ集合値式::={列挙によるマルチ集合値構成子問合せによるマルチ集合値構成子列挙によるマルチ集合値構成子::=MULTISET[マルチ集合要素〔,マルチ集合要素〕…]
  問合せによるマルチ集合値構成子::=MULTISET 表副問合せ

(2) 指定形式の説明

重要

ADB_AUDITREAD関数中にマルチ集合値式を指定する場合は,列挙によるマルチ集合値構成子を指定してください。問合せによるマルチ集合値構成子は指定できません。

ADB_CSVREAD関数中にマルチ集合値式を指定する場合は,次のように指定してください。

  • ADB_CSVREAD関数にCSVファイル名を個々に指定する場合は,列挙によるマルチ集合値構成子を指定してください。

  • ADB_CSVREAD関数に指定するCSVファイル名を表副問合せで求める場合は,問合せによるマルチ集合値構成子を指定してください。

列挙によるマルチ集合値構成子
MULTISET[マルチ集合要素〔,マルチ集合要素〕…]

ADB_AUDITREAD関数中に列挙によるマルチ集合値構成子を指定する場合

マルチ集合要素には,ADB_AUDITREAD関数に指定する監査証跡ファイルのパス名を文字列定数の形式で指定します。文字列定数については,「6.3 定数」を参照してください。

指定例を次に示します。

MULTISET['/audit/adbaud-201707*.aud','/audit/adbaud-201708*.aud']

指定規則を次に示します。

  • マルチ集合要素(監査証跡ファイルのパス名)は,最大1,000個指定できます。

ADB_CSVREAD関数中に列挙によるマルチ集合値構成子を指定する場合

マルチ集合要素には,ADB_CSVREAD関数に指定するCSVファイルのパス名を文字列定数の形式で指定します。文字列定数については,「6.3 定数」を参照してください。

指定例を次に示します。

MULTISET['/dir/file1.csv.gz','/dir/file2.csv.gz','/dir/file3.csv.gz']

上記の例では,3つのCSVファイルを指定しています。

指定規則を次に示します。

  • マルチ集合要素(CSVファイルのパス名)は,最大1,000個指定できます。

問合せによるマルチ集合値構成子
MULTISET 表副問合せ

ADB_CSVREAD関数に指定するCSVファイルのパス名を表副問合せの形式で指定します。表副問合せについては,「7.3 副問合せ」を参照してください。

指定例を次に示します。

MULTISET (SELECT "FILE_NAME" FROM "FILELIST"
              WHERE "FILE_DATE" BETWEEN '2012/01/01' AND '2012/12/31')

上記の例では,ファイル管理表(FILELIST)中のFILE_DATE列が,2012/01/012012/12/31であるCSVファイル名(FILE_NAME)を指定しています。

指定規則を次に示します。

  • 表副問合せの結果の列数は1にしてください。

  • 表副問合せ中に,外への参照列を指定できません。

    (例)エラーとなる指定例

    下線部分が,外への参照列の指定です。

    SELECT * FROM "T0"
      WHERE EXISTS (SELECT * FROM "T1",
                      TABLE(ADB_CSVREAD(MULTISET (SELECT "T2"."C1"
                                                    FROM "T2"
                                                      WHERE "T2"."C2" = "T0"."C2"),
                                       'COMPRESSION_FORMAT=GZIP;'))
                      AS "TF1" ("TFC1" INTEGER,"TFC2" VARCHAR(32)))

(3) 例題

例題1(ADB_AUDITREAD関数中に監査証跡ファイルのパス名を指定する場合)

2017年4月1日~2017年4月30日の間に,HADBサーバにアクセスしたHADBユーザの一覧を出力します。2017年4月1日~2017年4月30日に出力された監査証跡を格納している監査証跡ファイルを,/auditディレクトリ下に保存しているとします。

SELECT DISTINCT "USER_NAME"
    FROM TABLE(ADB_AUDITREAD(MULTISET['/audit/*.aud'])) "DT"
       WHERE "EXEC_TIME" BETWEEN TIMESTAMP'2017/04/01 00:00:00.000000'
                             AND TIMESTAMP'2017/04/30 23:59:59.999999'

下線部分がマルチ集合値式(列挙によるマルチ集合値構成子)の指定です。

例題2(ADB_CSVREAD関数中にCSVファイルのパス名を指定する場合)

GZIP形式で圧縮したCSVファイル(/dir/file1.csv.gz/dir/file2.csv.gz/dir/file3.csv.gz)から,次のデータを取り出します。

  • 顧客ID(USERID

  • 顧客名(NAME

  • 年齢(AGE

SELECT "USERID","NAME","AGE"
    FROM TABLE(ADB_CSVREAD(MULTISET ['/dir/file1.csv.gz','/dir/file2.csv.gz','/dir/file3.csv.gz'],
                          'COMPRESSION_FORMAT=GZIP;')) 
         AS "USERSLIST" ("USERID" CHAR(10),"NAME" VARCHAR(100),"AGE" INTEGER)

下線部分がマルチ集合値式(列挙によるマルチ集合値構成子)の指定です。

例題3(ADB_CSVREAD関数中に,表副問合せを使用してCSVファイルのパス名を指定する場合)

2010年に登録した顧客情報のデータを取り出します。データを取り出す際の条件は次のとおりとします。

  • 顧客情報のデータをCSV形式のファイルで保管している

  • CSVファイルをGZIP形式で圧縮している

  • CSVファイルの一覧を,CSVファイル管理表(FILELIST)で管理している

  • CSVファイル管理表には,CSVファイルの絶対パス名(FILE_NAME)とファイルを登録した日(FILE_DATE)が格納されている

SELECT "USERID","NAME","AGE"
    FROM TABLE(ADB_CSVREAD(MULTISET (SELECT "FILE_NAME" FROM "FILELIST"
                                       WHERE "FILE_DATE" BETWEEN '2010/01/01'
                                                             AND '2010/12/31'),
                          'COMPRESSION_FORMAT=GZIP;'))
         AS "USERSLIST" ("USERID" CHAR(10),"NAME" VARCHAR(100),"AGE" INTEGER)

下線部分がマルチ集合値式(問合せによるマルチ集合値構成子)の指定です。