7.4.1 SGMLTEXT型
ここでは,HiRDB Text Search Plug-inが提供する抽象データ型(SGMLTEXT型)を定義した表の作成方法について説明します。
ここでは,薬品管理表を作成します。薬品管理表の作成条件を次に示します。
- 薬品管理表を横分割します。ユーザ用RDエリアRDAREA01~RDAREA02に薬品管理表のLOB列構成基表を格納します。
- ユーザLOB用RDエリアLOBAREA01~LOBAREA02にSGMLTEXT型の列のデータを格納します。
- ユーザLOB用RDエリアLOBAREA03~LOBAREA04にプラグインインデクスを格納します。
- RDAREA01~RDAREA02,LOBAREA01~LOBAREA04にはデータロード対象表(インデクス)だけを格納していて,初期ロードとします。
- データロードをするときにインデクスを一括作成(省略値)します。
- ログレスモードでデータロードをします。
![[図データ]](figure/zu064010.gif)
- 〔説明〕
- 薬品ID(MCHAR型)をユーザ用RDエリアに格納し,取扱説明書(SGMLTEXT型)をユーザLOB用RDエリアに格納します。
- <この項の構成>
- (1) 薬品管理表の定義
- (2) プラグインインデクスの定義
- (3) 表へのデータの格納
- (4) データの格納状態の確認
- (5) ハッシュ関数で分割条件を指定している表にRDエリア単位でデータロードする場合
(1) 薬品管理表の定義
CREATE TABLEで薬品管理表を定義します。定義例を次に示します。
(a) キーレンジ分割の場合
- 格納条件指定
CREATE TABLE 薬品管理表(
薬品ID MCHAR(15),
取扱説明書 SGMLTEXT …1
ALLOCATE(SGMLTEXT IN((LOBAREA01),(LOBAREA02))) …2
PLUGIN'<DTD>medicine.dtd</DTD>' …3
)IN((RDAREA01)薬品ID<='薬品10',(RDAREA02)); …4
- 境界値指定
CREATE TABLE 薬品管理表(
薬品ID MCHAR(15),
取扱説明書 SGMLTEXT …1
ALLOCATE(SGMLTEXT IN((LOBAREA01),(LOBAREA02))) …2
PLUGIN'<DTD>medicine.dtd</DTD>' …3
)PARTITIONED BY 薬品ID
IN((RDAREA01)'薬品10',(RDAREA02)); …4
- 〔説明〕
- プラグインモジュールで提供されたデータ型を指定します。
- 薬品管理表中のLOB列(SGMLTEXT)をユーザLOB用RDエリアLOBAREA01及びLOBAREA02に分割して格納します。
- プラグインオプションを指定します。指定方法については,プラグインのマニュアルを参照してください。
- 薬品管理表のLOB列構成基表をユーザ用RDエリアRDAREA01,RDAREA02に分割して格納します。
(b) フレキシブルハッシュ分割,FIXハッシュ分割の場合
CREATE TABLE 薬品管理表(
薬品ID MCHAR(15),
取扱説明書 SGMLTEXT …1
ALLOCATE(SGMLTEXT IN((LOBAREA01),(LOBAREA02))) …2
PLUGIN'<DTD>medicine.dtd</DTD>' …3
)[FIX]※ HASH HASH6 BY 薬品ID
IN(RDAREA01,RDAREA02) …4
- 注※ FIXハッシュ分割の場合に指定します。
- 〔説明〕
- プラグインモジュールで提供されたデータ型を指定します。
- 薬品管理表中のLOB列SGMLTEXTをユーザLOB用RDエリアLOBAREA01及びLOBAREA02に分割して格納します。
- プラグインオプションを指定します。指定方法については,プラグインのマニュアルを参照してください。
- 薬品管理表のLOB列構成基表をユーザ用RDエリアRDAREA01,RDAREA02に分割して格納します。
(2) プラグインインデクスの定義
プラグインによって提供されたデータ検索用のインデクス型をインデクスに定義するとデータを高速に検索できます。プラグインから提供されたインデクス型を定義したインデクスをプラグインインデクスといいます。ここでは,HiRDB Text Search Plug-inが提供するインデクス型(NGRAM)を使用したプラグインインデクスの定義方法について説明します。
CREATE INDEXで薬品管理表にプラグインインデクスを定義します。定義例を次に示します。
CREATE INDEX PLGINDX1
USING TYPE NGRAM
ON 薬品管理表(取扱説明書)
IN ((LOBAREA03),(LOBAREA04));
- 〔説明〕
- プラグインインデクスPLGINDX1を横分割した薬品管理表に対応させて,ユーザLOB用RDエリアLOBAREA03及びLOBAREA04に分割して格納します。なお,プラグインインデクスPLGINDX1を構成する列に取扱説明書列を指定しています。
(3) 表へのデータの格納
データベース作成ユティリティ(pdload)で表にデータを格納します。格納手順を次に示します。
- 〈手順〉
- pdholdコマンドで,データロード対象RDエリア(RDAREA01~RDAREA02,LOBAREA01~LOBAREA04)を閉塞します。
- pdloadコマンドで,入力データファイルを表にデータロードします。RDエリアにはデータロード対象表(インデクス)だけを格納していて,かつ初期ロードのため,データベースの更新ログ取得方式にログレスモードを選択します。また,インデクスの作成方法にインデクス一括作成モード(省略値)を選択します。また,コンストラクタ関数やコンストラクタ関数に渡すデータ型の情報を列構成情報ファイルに指定します。pdloadコマンドに指定するオプションについては,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
- ログレスモードでpdloadコマンドを実行しているため,データロード対象RDエリアのバックアップを取得します。RDエリア単位のバックアップの取得方法については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
- pdrelsコマンドで,データロード対象RDエリアの閉塞を解除します。
上記のコマンドとユティリティの詳細及びこれらのコマンドとユティリティの実行結果の確認方法については,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
- 補足事項
- ログレスモードでpdloadコマンドを実行するため,前記の手順1~3の間はデータロード対象RDエリアを閉塞したままにしてください。
- 改竄防止表に対してpdloadコマンドでデータロードするとき,-dオプションは使用できません。
- インデクス一括作成中にエラーが発生した場合の対処方法については,「7.6 インデクス一括作成中に発生したエラーの対処方法」を参照してください。
(4) データの格納状態の確認
データロードをした場合は,運用を開始する前にデータベース状態解析ユティリティ(pddbst)を実行して,データの格納状態を確認することをお勧めします。設計どおりにデータベースを作成できたかどうかを確認できます。データベース状態解析ユティリティ(pddbst)を実行すると,次に示す情報を取得できます。
- ユーザ用RDエリア及びユーザLOB用RDエリア単位(物理解析だけ)のデータの格納状態
- レジストリ用RDエリア及びレジストリLOB用RDエリア単位(物理解析,論理解析)のデータの格納状態
(5) ハッシュ関数で分割条件を指定している表にRDエリア単位でデータロードする場合
表分割ハッシュ関数を使用したUAPを作成し,RDエリア単位に入力データファイルを作成できます。これによって,各RDエリアに格納されるデータ量が確認できるため,均等に分割できるハッシュ関数を選択できます。表分割ハッシュ関数を使用したUAPの作成方法については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。