ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework システム構築・運用ガイド

[目次][索引][前へ][次へ]

9.11.4 レコード抽出定義

レコード抽出定義(RecordExtractionDefinitionタグ)は,「9.9.3 編集用CB定義」で説明した編集用CB定義(DataEditCBDefinitionタグ)の子要素として定義します。

なお,レコードの抽出の処理については,「11.5 レコードの抽出」を参照してください。

<この項の構成>
(1) 記述形式
(2) 定義の詳細
(3) 記述例

(1) 記述形式

<RecordExtractionDefinition>
  <targetrecords>
    <targetrecord name="<抽出対象レコード名>">
      <record source="<レコード名>"
       timeposition="<時刻フィールド名>" condition="{AND|OR}">
        <field source="<フィールド名>"
         condition="{eq|ge|gt|le|lt|ne}" value="<条件値>"/>
      </record>
    </targetrecord>
  </targetrecords>
  <extractions size="<レコード最大保持数>" timeout="{ON|OFF}"
   samerecord="{overwrite|delete}" 
    <extraction name="<抽出条件名>" timelimit="<タイムアウト時間>">
      <targets>
        <target sourceL ="<抽出対象レコード名>"
         sourceR="<抽出対象レコード名>" condition="AND">
          <fieldcondition sourceL="<フィールド名>"
           condition="eq" sourceR="<フィールド名>"/>
        </target>
      </targets>
      <extractrecord name="<抽出レコード名>">
        <select source="<抽出対象レコード名>"/>
      </extractrecord>
      <timeoutrecord name="<タイムアウトレコード名>" />
    </extraction>
  </extractions>
</RecordExtractionDefinition>

(2) 定義の詳細

RecordExtractionDefinitionタグ(全体情報の定義)
レコード抽出定義の全体情報を定義します。この定義は必ず1個だけ記述します。
targetrecordsタグ(抽出対象条件群の定義)
抽出対象条件群の情報を定義します。抽出対象条件とは,抽出対象のレコードを取捨選択するための条件の一つです。抽出対象条件には,レコード条件とフィールド条件を定義します。レコード条件(recordタグ)では抽出対象のレコード名を,フィールド条件(fieldタグ)では抽出対象のレコードのフィールド値を指定します。
targetrecordタグ(抽出対象条件の定義)
抽出対象条件を定義します。この定義は10個まで記述できます。この定義は省略できません。
name="<抽出対象レコード名>"
抽出したレコードに付けるレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。この定義は1個だけ記述できます。
この属性で指定したレコード名は,selectタグのsource属性,targetタグのsourceL属性とsourceR属性で指定します。
recordタグ(レコード条件定義)
レコード条件を定義します。この定義は1個だけ記述できます。
source="<レコード名>"
レコードの抽出の前に処理したコールバックから渡されたレコード形式の中で,抽出対象とするレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。この属性は省略できません。
timeposition="<時刻フィールド名>"
TIMESTAMP型の時刻情報のフィールドを1〜100文字の半角英数字,およびアンダーライン(_)で指定します。この属性は省略できません。
condition="{AND|OR}"
レコード条件の論理条件を定義します。省略した場合,ANDが仮定されます。
指定できる値を次に示します。
  • AND
    複数のフィールド条件にすべて一致したフィールドを持つレコードを出力結果として出力します。
  • OR
    複数のフィールド条件に一つでも一致したフィールドを持つレコードを出力結果として出力します。
fieldタグ(フィールド条件定義)
フィールド条件を定義します。この定義は10個まで記述できます。この定義は省略できません。
フィールド条件は,抽出対象とするレコードのフィールドごとに指定します。
source="<フィールド名>"
recordタグのsourceで指定したレコード形式のフィールド名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。この属性は省略できません。
condition="{eq|ge|gt|le|lt|ne}"
フィールド条件の比較演算子を表す値を指定します。
この属性に指定できる値は,fieldタグのvalue属性に文字データを指定するか,数値データを指定するかによって異なります。指定できる値を次に示します。省略した場合,eqが仮定されます。
  • 文字データの場合
    eq,またはneが指定できます。
  • 数値データの場合
    eq,ge,gt,le,lt,およびneが指定できます。
指定できる値の意味については,「9.11.3 フィルター定義」のfieldタグのcondition属性の説明を参照してください。
value="<条件値>"
フィールド条件の条件値を文字データ,または数値データで指定します。使用できる文字,または数値を次に示します。この属性は省略できません。
  • 文字データの場合
    指定できる文字数は1〜128文字です。
    文字列として正規表現が使用できます。正規表現の解析には,java.util.regex.Patternクラスを使用します。このため,正規表現は,java.util.regex.Patternクラスがサポートする正規表現の範囲で記述してください。
    正規表現で特別な意味を持つ文字を本来の文字として使用するには,円記号(\)でエスケープする必要があります。
    正規表現で特別な意味を持つ文字を次に示します。
    「(」,「)」,「[」,「]」,「{」,「}」,「-」,「|」,「/」,「\」,「.」,「*」,「?」,「+」,「^」,「$」
  • 数値データの場合
    -9223372036854775808〜9223372036854775807の整数を指定できます。
extractionsタグ(抽出条件群の定義)
抽出条件群の情報を定義します。抽出条件とは,抽出対象のレコードを取捨選択するための条件の一つです。この定義は省略できません。
size="<レコード最大保持数>"
レコードバッファーに保持するレコード数の上限値を1〜1000000の整数で指定します。この属性を省略した場合,10000が仮定されます。
timeout="{ON|OFF}"
extractionタグのtimelimit属性で指定した時間が経過し,レコードバッファーに保持しているレコードがタイムアウトした場合に,レコード(タイムアウトレコード)を出力するかどうかを指定します。
この属性を省略した場合,OFFが仮定されます。
指定できる値を次に示します。
  • ON
    タイムアウトした場合に,タイムアウトレコードを出力します。
  • OFF
    タイムアウトした場合に,タイムアウトレコードを出力しません。
なお,タイムアウトレコードについては,timeoutrecordタグで,レコード名を定義します。
samerecord="{overwrite|delete}"
同一の抽出対象のレコードが入力された場合の対処を指定します。省略した場合,overwriteが仮定されます。
指定できる値を次に示します。
  • overwrite
    同一レコードと見なされた既存のレコードが,レコードバッファーのどの位置にあるかによって処理が異なります。
    最も後ろのレコードの場合,新しいレコードで,レコードバッファーに保持していた既存のレコードを上書きします。最も後ろのレコードでない場合,上書きしたレコードより後ろのレコードを破棄して,新しいレコードを保持します。
  • delete
    入力されたレコードを破棄します。
extractionタグ(抽出条件の定義)
抽出条件を定義します。この定義は10個まで記述できます。この定義は省略できません。
name="<抽出条件名>"
抽出条件名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
この定義は1個だけ記述できます。
timelimit="<タイムアウト時間>"
レコードバッファーに保持したレコードをタイムアウトと見なすまでの,レコードの生存時間(単位:ミリ秒)を1〜3600000の整数(1ミリ秒〜1時間)で指定します。
この属性を省略した場合,10000が仮定されます。
targetsタグ(レコード間条件群の定義)
レコード間条件群を定義します。
レコード間条件とは,抽出条件を成立させるための条件の一つです。targetタグではレコードの入力順序を指定し,fieldconditionタグではレコード間でフィールド値を比較するためのフィールド名を指定します。
targetタグ(レコード間条件の定義)
レコード間条件として,レコードの入力順序を指定します。この定義は9個まで記述できます。この定義は省略できません。
この定義では,sourceL属性,およびsourceR属性でレコード名を指定して,レコードの入力順序を定義します。例えば,次のように指定した場合には,レコードの入力順序は,R1→R2→R3となり,この入力順序どおりに入力されたレコードがレコード条件に一致するレコードとなります。
       :
<rex:target sourceL="R1" sourceR="R2">
       :
<rex:target sourceL="R2" sourceR="R3">
       :
sourceL="<抽出対象レコード名>"
レコード間条件の左辺のレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
sourceR="<抽出対象レコード名>"
レコード間条件の右辺のレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
condition="AND"
レコード間条件の論理条件を指定します。省略した場合,ANDが仮定されます。
指定できる値を次に示します。
  • AND
    複数のレコード間条件にすべて一致したレコードを出力結果として出力します。
fieldconditionタグ(フィールドの定義)
レコード間条件として,フィールド名を指定します。この定義は10個まで記述できます。この定義は省略できません。
この定義では,sourceL属性,およびsourceR属性で,targetタグで指定したレコードのフィールド名を指定します。例えば,次のように指定した場合には,レコードR1のフィールドF11と,レコードR2のフィールドF21の値を比較することになります。レコードR1のフィールドF11と,レコードR2のフィールドF21の値が一致する場合は,レコード間条件に一致すると判定されます。
       :
<rex:target sourceL="R1" sourceR="R2">
<rex:fieldcondition sourceL="F11" condition="eq" sourceR="F21"/>
       :
sourceL="<フィールド名>"
targetタグのsourceL属性で指定したレコードのフィールド名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
condition="eq"
レコード条件の比較演算子を表す値を指定します。指定できる値は,文字データと数値データのどちらを指定する場合も,比較演算子「=」を表す,eqです。省略した場合,eqが仮定されます。
sourceR="<フィールド名>"
targetタグのsourceR属性で指定したレコードのフィールド名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
extractrecordタグ(抽出レコードの定義)
抽出レコードを定義します。
抽出レコードとは,抽出条件に一致したレコードを結合して,新たに生成するレコードのことです。
name="<抽出レコード名>"
抽出レコードのレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。また,抽出レコード名は標準提供アダプター内で一意となるように指定してください。
selectタグ(抽出対象レコードの定義)
抽出レコード生成のために結合するレコードを定義します。この定義は10個まで記述できます。この定義は省略できません。
source="<抽出対象レコード名>"
targetrecordタグのname属性で指定したレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。この属性は省略できません。
timeoutrecordタグ(タイムアウトレコードの定義)
タイムアウトの発生時に出力するレコードを定義します。この定義は,extractionsタグのtimeout属性にONを指定した場合は,必ず定義してください。timeout属性にOFFを指定した場合は,この定義は無視されます。
name="<タイムアウトレコード名>"
出力するレコード名を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。この属性は省略できません。また,タイムアウトレコード名は標準提供アダプター内で一意となるように指定してください。

(3) 記述例

<?xml version="1.0" encoding="UTF-8"?>
<root:AdaptorCompositionDefinition
 xmlns:rex ="http://www.hitachi.co.jp/soft/xml/sdp/adaptor/definition/callback/RecordExtractionDefinition">
<!-- 途中略 -->
 
<!-- 編集用CB定義 -->
<cb:DataEditCBDefinition class="jp.co.Hitachi.soft.sdp.adaptor.callback.dataedit.recordextract.RecordExtractionCBImpl" name="extractor1">
  <!-- レコード抽出定義 -->
  <rex:RecordExtractionDefinition>
    <!-- 抽出対象条件群の定義 -->
    <rex:targetrecords>
      <rex:targetrecord name="element1">
        <rex:record source="R1" timeposition="F11" condition="AND">
          <rex:field source="F12" condition="eq" value="TARO"/>
          <rex:field source="F13" condition="gt" value="100"/>
        </rex:record>
      </rex:targetrecord>
      <rex:targetrecord name="element2">
        <rex:record source="R2" timeposition="F21" condition="OR">
          <rex:field source="F22" condition="eq" value="JIRO"/>
          <rex:field source="F23" condition="le" value="50"/>
        </rex:record>
      </rex:targetrecord>
    </rex:targetrecords>
    <!-- 抽出条件群の定義 -->
    <rex:extractions size="100000" timeout="ON" samerecord="overwrite">
      <rex:extraction name="T1" timelimit="10000">
        <rex:targets>
          <rex:target sourceL="element1" sourceR="element2" condition="AND">
            <rex:fieldcondition sourceL="F13" condition="eq" sourceR="F23"/>
            <rex:fieldcondition sourceL="F14" condition="eq" sourceR="F24"/>
          </rex:target>
        </rex:targets>
        <!-- 抽出レコードの定義 -->
        <rex:extractrecord name="ER1">
          <rex:select source="element1"/>
          <rex:select source="element2"/>
        </rex:extractrecord>
        <!-- タイムアウトレコードの定義 -->
        <rex:timeoutrecord name="TIMEOUT"/>
      </rex:extraction>
    </rex:extractions>
  </rex:RecordExtractionDefinition>
</cb:DataEditCBDefinition>

この記述例での定義内容を次に示します。