5.10.6 反映グループ定義
表単位反映方式(表単位分割方式,キーレンジ単位分割方式,又はハッシュ分割方式)で反映処理を並列に実行するときの実行単位にする反映グループを定義します。反映グループは,128個まで繰り返し定義できます。フィールド名称,認可識別子,及び表識別子の指定方法については,「5.10.1 定義の規則」を参照してください。
(1) 形式
〔{{ group 反映グループ名
by〔 認可識別子.〕表識別子〔{{,〔 認可識別子.〕表識別子 }}…〕
/**** キーレンジ単位分割方式の定義 ****/
〔{{〔 in '反映先FESのホスト名'/ '反映先FESのサーバ識別子'〔 / '反映先FESのポート番号' 〕〕
〔 having キーレンジ分割条件文〔{{,キーレンジ分割条件文}}…〕| other 〕
}}…〕
/**** ハッシュ分割方式の定義 ****/
〔{{ hash
{ in '反映先FESのホスト名'/ '反映先FESのサーバ識別子'〔 / '反映先FESのポート番号' 〕
〔(RDエリア名 {{,RDエリア名}} …|other)〕
〔{{ ,'反映先FESのホスト名'/ '反映先FESのサーバ識別子'〔 / '反映先FESのポート番号' 〕
〔(RDエリア名 {{,RDエリア名}} …|other)〕
}}… 〕
|divide into SQLプロセス分割数 }
}}…〕〕
(2) オペランドの説明
-
〜〈1〜8文字の記号名称〉
反映を実行するグループの名称を指定します。反映グループ名は,反映定義中のすべての反映グループ定義で一意になるように指定してください。
次に示す文字列は,大文字,小文字に関係なく,反映グループ名として指定できません。
-
trngroup
-
othergrp
-
uocxxx※
注※ xxxは3けたの符号なし整数を表します。
例えば,trngroupの場合はtrngroup,TRNGROUP,TrnGroupなどが指定できません。
-
-
by〔認可識別子.〕表識別子〔{{,〔 認可識別子.〕表識別子 }}…〕
グループを構成する反映対象表を指定します。
-
in '反映先FESのホスト名'/ '反映先FESのサーバ識別子'〔 / '反映先FESのポート番号'〕
反映側HiRDBでマルチFES機能を使ってフロントエンドサーバが複数起動している場合に,反映先のフロントエンドサーバのホスト名,サーバ識別子,ポート番号を指定します。マルチFES機能を使っている場合にin句の指定を省略すると,反映グループに対応する反映先のフロントエンドサーバは,反映側HiRDBのシステムマネジャによって決められます。マルチFES機能を使っていない場合にin句を指定しても,ただ一つ起動しているフロントエンドサーバに対して,すべての反映グループが対応付けられます。
一つの表に対する反映処理を,キーレンジ単位に分割して実行する場合には,in句とhaving句を,分割するキーレンジ数分指定します。このとき,having句で分割する条件も指定します。
in句は,一つの反映グループ定義内で最大8個定義できます。一つの反映グループ定義内で複数のin句を指定する場合,having句は省略できません。また,一つの反映グループ定義内で同一の反映先のフロントエンドサーバを複数指定することもできます。
反映先HiRDBがマルチフロントエンドサーバの場合に,接続するHiRDBサーバのフロントエンドサーバのホスト名を指定します。HiRDBシステム定義のpdunitで-pポート番号を指定しているホストへ接続する場合(系切り替え機能を使用している場合)は,そのポート番号を指定する必要があります。指定フォーマットは次のとおりです。
反映先FESのホスト名:反映先FESのポート番号
- 反映先FESのホスト名
-
〜〈1〜32文字の識別子〉
反映先のフロントエンドサーバのPDFESHOST環境変数に設定したホスト名を指定します。
- 反映先FESのサーバ識別子
-
〜〈1〜8文字の識別子〉
反映先のフロントエンドサーバのPDSERVICEGRP環境変数に設定したサーバ識別子を指定します。
- 反映先FESのポート番号
-
〜〈1〜5文字の識別子〉
反映先のフロントエンドサーバのPDNAMEPORT環境変数に設定したポート番号を指定します。
上記の環境変数の内容については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
in句で指定できる反映先のフロントエンドサーバの数を次に示します。
表単位分割方式:1グループ当たり1個
キーレンジ単位分割方式:一つのレンジで1個
ハッシュ分割方式:1グループ当たり2〜8個
-
having キーレンジ分割条件文〔{{,キーレンジ分割条件文}}…〕|other
一つの表に対する反映処理をキーレンジ単位に分割して実行する場合に,分割するための条件文を指定します。having句は,一つのin句に対して一つだけ定義できます。in句とhaving句の組み合わせを複数指定した場合には,先頭のin句とhaving句から順に検証していき,最初に合致した条件に対する反映処理が実行されます。
なお,固定長文字列(CHAR,MCHAR,又はNCHAR)を指定する場合,条件に合致させるために,条件値長=定義長となるように,後ろにスペースを付加して指定してください。
反映データがすべての条件文に合致しない場合には,反映処理は実行されません。すべての条件文に合致しない場合にも反映処理を実行する場合には,各反映グループ定義の最後に「having other」を指定してください。
- having キーレンジ分割条件文
-
キーレンジ分割をするときの条件文を指定します。条件文は次の形式で指定します。
- 列名 = 定数
-
列の値が指定した定数と等しい
- 列名 < > 定数
-
列の値が指定した定数と等しくない
- 列名 > 定数
-
列の値が指定した定数より大きい
- 列名 >= 定数
-
列の値が指定した定数以上
- 列名 < 定数
-
列の値が指定した定数より小さい
- 列名 <= 定数
-
列の値が指定した定数以下である
- 列名 IS NULL
-
列の値がNULL値である
- 列名 IS NOT NULL
-
列の値がNULL値でない
条件文は,一つのhaving句に最大8個定義できます。一つのhaving句に条件文を複数指定した場合は,指定した条件がすべてAND結合されます。例えば,「having c1=100,c2=200」と指定した場合には,「c1=100」と「c2=200」の両方の条件を満たすデータの場合だけ,反映処理が実行されます。
-
一つの表に対する反映処理で反映SQLプロセスを複数個 並列して処理するときに,更新情報を各プロセスに分散するときに指定します。分散するときは,HiRDBのハッシュ分散関数を使います。ハッシュキー列はHiRDBから検索しますが,マッピングキー以外の列が検索されると,反映定義の解析でエラーになります。
ハッシュ分割は,HiRDBでハッシュ分割した表に対してだけ指定できます。HiRDBでハッシュ分割していない表にhashオプションを指定すると,反映定義の解析でエラーになります。
抽出側の列と反映先のハッシュキー列との対応については,次に示す条件を満たしてください。
-
列のデータ型が抽出側と反映側で一致している。
-
列のデータ型がDECIMAL型のときは,精度と位取りが一致している。
-
列のデータ型が文字型のときは,「抽出側の列長 ≦ 反映側の列長」である。
-
列のデータ型がTIMESTAMP型のときは,小数部のけた数が一致している。
上記の条件が一つでも満たされないと,反映定義の解析でエラーになります。
hashオプションを指定してハッシュ分割するときはHiRDBのクライアントライブラリを使うので,環境変数SHLIB_PATHに$PDDIR/client/libを追加してください。
-
-
RDエリア名
ハッシュ分割はRDエリア単位でデータ格納先を振り分けるため,ハッシュ分割するときの反映先FES指定ごとの振り分け条件として,RDエリア名を指定します。指定がないときは,Datareplicatorで自動的に振り分け先を決定します。
RDエリア名は省略できますが,一つのgroup文の中でRDエリア名の指定がある反映先FES指定と指定がない反映先FES指定が混在させないでください。混在していると,定義解析エラーになって,反映処理が終了します。
一つのgroup文の中で同じRDエリア名を複数指定できません。複数指定していると,定義解析エラーになって,反映処理が終了します。
条件として指定していないすべてのRDエリアのデータをすべて反映させるときは,RDエリア名にotherを指定します。otherを省略すると,group文で最後に指定した反映先FES指定にotherを指定したと仮定されます。otherを指定するときは,次の規則に従ってください。
-
otherは,複数指定するin句の最後に指定してください。
[正しい例]
in 'host1'/'fes1'(rdarea1,rdarea2),
'host2'/'fes2'(rdarea3,rdarea4),
'host3'/'fes3'(other)
[エラーになる例]
in 'host1'/'fes1'(rdarea1,rdarea2),
'host2'/'fes2'(other),
'host3'/'fes3'(rdarea5,rdarea6)
エラーになる例の場合,3行目と2行目を入れ換えて指定するとエラーを回避できます。
-
otherは,RDエリア名の指定で,ほかのRDエリアと同時に指定できません。
[エラーになる例 その1]
in 'host1'/'fes1'(rdarea1,rdarea2),
'host2'/'fes2'(rdarea3,rdarea4),
'host3'/'fes3'(rdarea5,other)
エラーになる例 その1の場合,otherを削除するとエラーを回避できます。
[エラーになる例 その2]
in 'host1'/'fes1'(rdarea1,rdarea2),
'host2'/'fes2'(rdarea3,other),
'host3'/'fes3'(rdarea5,rdarea6)
エラーになる例 その2の場合,2行目と3行目を入れ換えてotherを削除するとエラーを回避できます。
なお,hashオプションでは,キーレンジとは異なり,指定していないレンジを反映対象としないようにはできません。省略したRDエリアは,最後のFES指定のレンジで反映されます。そのため,RDエリアを省略しないで,すべてのRDエリア名をどれかのFES指定で定義することをお勧めします。
(3) 反映グループ定義による反映グループ分け
反映グループ定義を定義している場合,反映側Datareplicatorでは,反映処理をグループ単位に分けて並列処理します。反映グループは反映グループ定義に従って,128グループまで生成できます。反映グループ定義による反映グループの生成を次の表に示します。なお,キーレンジ単位分割方式又はハッシュレンジ分割方式の反映グループを定義する場合,PURGE TABLEが実行されない表でなければなりません。
反映処理の分類 |
反映処理実行時の処理グループの生成 |
---|---|
反映グループ定義で指定した表に対する反映 |
反映グループ定義に従って,グループを生成します。 |
反映グループ定義で指定しなかった表に対する反映 |
指定されなかったすべての反映対象表で一つのグループを生成します。グループ名はothergrpと設定されます。 |
UOCによる反映 |
UOCごとにグループを生成します。グループ名は,UOC001からUOC128までの範囲で自動的に設定されます。 |
(4) キーレンジ分割を指定するときの規則
キーレンジ分割条件を指定するときの規則を説明します。
-
キーレンジ分割(in句とhaving句の組み合わせ)の最大数
一つの反映グループ定義では,キーレンジ分割(in句とhaving句の組み合わせ)を8個まで指定できます。8個以上のキーレンジ分割を指定すると,定義解析時にエラーになります。
-
キーレンジ分割の条件文の最大数
一つのキーレンジ分割では,条件文を半角のコンマ(,)で区切ることによって,8個まで指定できます。8個以上の条件文を指定すると,定義解析時にエラーになります。
-
条件文に指定できる列
キーレンジ分割の条件文に指定できる列は,反映処理でマッピングキーとしている列だけです。マッピングキーではない列をキーレンジ分割の条件文に指定している場合には,定義解析時にエラーになります。
-
条件文に指定した列に指定できる定数
キーレンジ分割の条件文には,すべてのデータ型の列を指定できます。ただし,データ型ごとに,指定できる定数に制限があります。キーレンジ分割条件文内の列に指定できる定数を次の表に示します。
表5‒23 キーレンジ分割条件文内の列に指定できる定数 列のデータ型
指定できる定数
指定例
INTEGER
−2147483648〜2147483647の整数値
123456
SMALLINT
−32768〜32767の整数値
12345
DECIMAL(n)
nけたの整数値(n:1〜38)
1234567890
DECIMAL(n,m)
整数部が0〜(n−m)けたの固定小数点表現形式
123.456789
SMALLFLT
固定小数点表現形式,及び単精度浮動小数点表現形式
1.23E10
FLOAT
固定小数点表現形式,及び倍精度浮動小数点表現形式
1.2345E20
CHAR
1〜255文字の,シングルクォーテーション(’)で囲まれた文字列
'ABCDEF'
VARCHAR
NCHAR
NVARCHAR
MCHAR
MVARCHAR
DATE
反映側HiRDBでの文字列表現のフォーマットである’YYYY-MM-DD’だけ
YYYY:0001〜9999(年)
MM :01〜12(月)
DD :01〜31(日)
'2001-01-01'
TIME
反映側HiRDBでの文字列表現のフォーマットである’HH-MI-SS’だけ
HH :00〜23(時)
MI :00〜59(分)
SS :00〜59(秒)
'12:00:00'
INTERVAL YEAR TO DAY
精度8,位取り0の固定小数点数である±yyyymmdd.
yyyy:0000〜9999(か年)
mm :00〜99(か月)
dd :00〜99(か日)
0000010101.
INTERVAL HOUR TO SECOND
精度6,位取り0の固定小数点数である±hhmmss.
hh :00〜99(時間)
mm :00〜99(分)
ss :00〜99(秒)
−010101.
TIMESTAMP
反映側HiRDBでの文字列表現のフォーマットである’YY-MM-DD HH-MI-SS[.NN…N]’だけ※
YYYY:0001〜9999(年)
MM :01〜12(月)
DD :01〜31(日)
HH :00〜23(時)
MI :00〜59(分)
SS :00〜59(秒)
NN…N:0〜999999(最大6けたの小数秒)
'2001-01-01 10:45:30.1523'
- 注※
-
日データではその月の最終日付を超えるかだけをチェックします。うるう年のチェックはしません。
-
固定長文字列データ型の後ろの空白文字の扱い
固定長文字列データ型を条件文に指定する場合には,反映環境定義のref_data_backspaceオペランドの指定値によって,次のように指定してください。
-
suppressを指定した場合
固定長文字列データ型の後ろの空白文字を除いた値を指定します。
-
nosuppressを指定した場合
固定長文字列データ型の後ろの空白文字を含んだ値を指定します。
-
(5) 注意
反映処理が正常終了又はイベント終了以外で停止している場合に,反映グループ定義を変更すると,前回までの反映処理と定義変更後の反映処理との間で不整合が発生する場合があります。
-
UOCによる反映がある場合の反映処理の方式
UOCによる反映がある場合,反映システム定義,イベントでの指定,及びhdsrfctlコマンドでの指定に関係なく,表単位反映方式で反映処理が実行されます。