5.10.5 反映表定義
更新情報に対する反映対象表を定義します。1個の更新情報を,複数の反映対象表に反映する場合には,反映表定義を反映対象表の数だけ繰り返し定義します。フィールド名称,認可識別子,及び表識別子の指定方法については,「5.10.1 定義の規則」を参照してください。
- 〈この項の構成〉
(1) 形式
〔{{ load { フィールド名称〔{{,フィールド名称 }}…〕|* }
from 更新情報名
{ to〔{ timestamp|sqlconvopt1|sqlconvopt2 }〕
〔 認可識別子.〕表識別子
〔 check {not_null_unique|unique|none}〕
〔 with lock 〕
| by 'uoc名' }
}}…〕
(2) オペランドの説明
-
load {フィールド名称〔{{,フィールド名称}}…〕|*}
更新情報のフィールドを,反映対象表にどのように対応付けるのかを定義します。マッピングキーに該当するフィールド名称は,反映対象表のマッピングキーを格納した列に対応するように定義してください。
なお,HiRDBのpd_max_access_tablesオペランドには,指定したload文の個数以上の値を指定してください。pd_max_access_tablesオペランドの指定値が,指定したload文の個数よりも少ない場合は,HiRDBでKFPA11931-Eメッセージが出力されエラーになります。pd_max_access_tablesオペランドの詳細については,マニュアル「HiRDB システム定義」を参照してください。
-
〜〈1〜8文字の記号名称〉
-
to〔{ timestamp|sqlconvopt1|sqlconvopt2 }〕〔認可識別子.〕表識別子
〔check {not_null_unique|unique|none}〕〔with lock〕|by ’uoc名’
反映対象表の認可識別子と表識別子,又はUOC名を定義します。認可識別子と表識別子については,マニュアル「HiRDB SQLリファレンス」を参照してください。
なお,反映対象表の表識別子を指定する場合は,更に次に示すオプションの指定ができます。
-
時系列情報を取得するかどうか。
-
マージ表を作成するかどうか。
-
ユニークチェックを行うかどうか。
-
反映対象表に対してLOCK TABLE文を発行するかどうか。
- timestamp
-
時系列情報を取得するときに指定します。timestampを指定すると,load句の指定は時系列情報格納表と認識して格納されます。
繰返し列が含まれている表には,timestampは指定できません。指定すると定義解析エラーになって,このデータ連動識別子での反映処理が停止します。
- sqlconvopt1|sqlconvopt2
-
更新だけでなく,追加や削除を実行できるマージ表を作成するときに指定します。この値を指定するときは,反映対象表が次に示す条件を満たしていることが前提です。
-
マッピングキー列の一部又は全部に,ユニークインデクスが定義されている。
-
マッピングキーでない列には,ユニークインデクスの定義がない。
-
反映対象表は,時系列情報表以外である。
-
マッピングキーが更新されない。
SQL文の実行と指定値による動作の違いを次に示します。
SQL文
sqlconvopt1
sqlconvopt2
INSERTでキー重複が発生。
UPDATEに置き換えて実行されます。
UPDATEに置き換えて実行されます。
UPDATEで該当行がない。
INSERTに置き換えて実行されます。
INSERTに置き換えて実行されます。
DELETE
該当行が削除されます。該当行がないときは,無視されます。
該当行があるときは,マッピングキー以外でCONST句指定のない反映対象列にNULL値を設定してから,UPDATEに置き換えて実行されます。
該当行がないときは,無視されます。
PURGE
すべての行が削除されます。
すべての行が削除されます。
マージ表を作成するときの注意
-
マージ表を作成するときは,sqlconvopt1又はsqlconvopt2を指定します。sqlconvopt1とsqlconvopt2では,DELETEデータに対する処理が異なります。sqlconvopt1ではDELETEを行削除として反映しますが,sqlconvopt2ではDELETEをnull値更新として反映します。null値更新の対象になる列は,format文でconst句を指定していない列だけです。
-
マージ表を作成する指定をすると,SQLを2回発行することになります。そのため,変換が大量に発生すると反映処理の性能に影響が出ることがあります。
-
列データ編集UOCを使うときは,変換前SQL発行直前と変換後発行直前の2回UOCが呼び出されます。また,sqlconvopt2指定でDELETEを実行したときもUOCが呼び出されます。このときのデータの値は,NULL値になります。
- 認可識別子
-
反映対象表の認可識別子を指定します。timestampを指定したときは,時系列情報格納表の認可識別子を指定します。認可識別子を省略すると,反映システム定義で定義した認可識別子が仮定されます。
- 表識別子
-
反映対象表の表識別子を指定します。timestampを指定したときは,時系列情報格納表の表識別子を指定します。
- check {not_null_unique|unique|none}
-
マッピングキー列に対するユニークチェックを行うときの条件を指定します。ユニークチェックの内容を次の表に示します。この句を指定すると,反映環境定義のmapping_key_checkオペランドの値に関係なく,ここで指定した値に従ってユニークチェックを行います。
この句を省略した場合は,mapping_key_checkオペランドの指定値に従います。
なお,timestampオプションが指定されている表には,指定値に関係なくユニークチェックは行われません。
また,マージ表作成オプションを使用する場合には,not_null_uniqueを指定することをお勧めします。
表5‒20 ユニークチェックの内容 チェック項目
チェック内容
インデクス種別
次のどれかのインデクス種別であること。
-
ユニークインデクス
-
ユニーククラスタインデクス
-
プライマリインデクス
-
プライマリクラスタインデクス
インデクス構成列
マッピングキー構成列だけであること。
反映対象表に対して,「表5-20 ユニークチェックの内容」の内容を満たすインデクスが定義されていること,及びそのインデクスの構成列がNOT NULL属性であることを確認します。
反映対象表に対して,「表5-20 ユニークチェックの内容」の内容を満たすインデクスが定義されていることを確認します。NULL値に関するチェックは行わないため,完全なデータの一意性は抽出側DBを更新するユーザプログラムなどで保証する必要があります。
チェックを行いません。データの一意性は抽出側DBを更新するユーザプログラムなどで保証する必要があります。
mapping_key_checkオペランドとcheck句では,指定した際の反映側Datareplicatorの動作が異なります。
mapping_key_checkオペランド(not_null_unique指定)の例と,反映側Datareplicatorの動作を次の表に示します。
指定例
動作
load * from t1 to T1 check not_null_unique
not_null_uniqueのチェックを行います。
load * from t1 to T1 check none
load * from t1 to T1
チェックを行いません。
mapping_key_checkオペランドを省略した場合(check句の指定が優先されます)の例と,反映側Datareplicatorの動作を次の表に示します。
指定例
動作
load * from t1 to T1 check not_null_unique
not_null_uniqueのチェックを行います。
load * from t1 to T1 check none
チェックを行いません。
load * from t1 to T1
not_null_uniqueのチェックを行います。
-
- with lock
-
load文で指定した表に対してLOCK TABLE文を発行後,反映処理を実行する場合に指定します。この句の指定は,HiRDBへの反映にだけ有効となります。HiRDB以外への反映の場合,指定は無視されます。
with lock句は次に示す場合に指定します。
・HiRDBの共用RDエリア中に作成した共用表に対して反映処理を実行する場合(必須※)
注※ 指定がない場合,SQL実行エラーとなります。
・反映処理で排他制御によるオーバヘッドを削減したい場合(任意)
LOCK TABLE文の実行がエラーとなった場合の動作を次の表に示します。
表5‒21 LOCK TABLE文の実行がエラーとなった場合の動作 SQLCODE
反映環境定義のskip_sqlcodeオペランド指定なし
反映環境定義のskip_sqlcodeオペランド指定あり
-770,-911,-722,-723
実行中のトランザクションをロールバックし,同じトランザクションを更に2回までリトライします。2回目のリトライでもエラーが解消されない場合,KFRB03034-Eメッセージ及びエラーとなったLOCK TABLE文を未反映情報ファイルへ出力し,反映処理を停止します。
LOCK TABLE文をスキップし,LOCK TABLE文が発行されていない状態で反映処理を続行します。出力する情報種別は反映環境定義のsqlerr_skip_infoオペランドに依存します(output,又はmsgoutputが指定されている場合,KFRB03043-Wメッセージを出力します)。
上記以外
KFRB03034-Eメッセージ及びエラーとなったLOCK TABLE文を未反映情報ファイルへ出力し,反映処理を停止します。
注意
・with lock句を指定する場合,反映対象表は一つのRDエリアに対して,一つの表を格納する配置を推奨します。
・次に示す反映プロセス構成ではデッドロックが発生する可能性があるため適用できません。
・共用表を反映対象表とする場合,共用表への反映トランザクションが発生しているときに,非反映対象表への参照・更新ができなくなるため,反映対象表と非反映対象表を異なる共用RDエリアに格納しておく必要があります。
- by 'uoc名'
-
〜〈1〜64バイトのパス名〉
ユーザが独自に作成したプログラム(UOC)で反映処理を実行する場合に,そのプログラム名を絶対パス名で指定します。パス名を省略してファイル名だけを指定できません。また,by句を指定した場合はload句に定数フィールドを指定できません。
-