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

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

9.11.1 フォーマット変換定義

フォーマット変換定義(FormatDefinitionタグ)は,「9.9.3 編集用CB定義」で説明した編集用CB定義(DataEditCBDefinitionタグ)の子要素として定義します。

なお,フォーマット変換の処理については,「11.2.2(3) フォーマット変換」,または「11.6.2(4) フォーマット変換」を参照してください。

<この項の構成>
(1) 記述形式
(2) 定義の詳細
(3) 記述例
(4) TIMESTAMP型の開始年月の指定
(5) レコード構成の記述形式
(6) type属性の指定値と,対応するJavaのデータ型およびCQLのデータ型
(7) データ型種別の表記規則

(1) 記述形式

<FormatDefinition ioType="{INPUT|OUTPUT}">
  <common>
    <unmatchedFormat>{IGNORE|WARNING|ERROR}
    </unmatchedFormat>
    <format timestampformat="<形式番号>" year="<開始年>" month="<開始月>"/>
  </common>
  <records>
    <record name="<レコード名>" exp="<レコード構成>" 
      timestampformat="<形式番号>" year="<開始年>" month="<開始月>">
      <field name="<フィールド名>"
        type="{INT|SHORT|BYTE|LONG|BIG_DECIMAL|FLOAT|DOUBLE|STRING|DATE|TIME|TIMESTAMP}"
        pattern="<パターン>"/>
    </record>
  </records>
</FormatDefinition>

(2) 定義の詳細

FormatDefinitionタグ(全体情報の定義)
フォーマット変換定義の全体情報を定義します。この定義は必ず1個だけ記述します。
ioType="{INPUT|OUTPUT}"
この定義で指定する標準提供アダプターの種類を指定します。この属性は省略できません。
指定できる値を次に示します。
  • INPUT
    入力アダプターでフォーマット変換を定義する場合に指定します。
  • OUTPUT
    出力アダプターでフォーマット変換を定義する場合に指定します。
commonタグ(共通定義)
フォーマット変換定義の共通情報を定義します。この定義は必ず1個だけ記述します。
unmatchedFormatタグ(変換パターンに一致しないレコードの定義)
このタグでは,フォーマット変換のパターンに一致しないレコードを検知したときの対処を指定します。
この定義は1個だけ記述できます。また,この定義は省略できます。省略した場合,ERRORが仮定されます。
指定できる値を次に示します。
  • IGNORE
    検知した内容を無視して,標準提供アダプターの処理を続行します。
  • WARNING
    警告メッセージを出力して,標準提供アダプターの処理を続行します。
  • ERROR
    エラーメッセージを出力して,標準提供アダプターを停止します。
formatタグ(フォーマット定義)
データ型種別で扱うTIMESTAMP型の文字列表現について定義します。この定義は1個だけ記述できます。また,TIMESTAMP型の文字列表現を使用しない場合,この定義は省略できます。
timestampformat="<形式番号>"
TIMESTAMP型の形式番号を1〜4の整数で指定します。省略した場合,1が仮定されます。
なお,formatタグのtimestampformat属性を指定し,かつrecordsタグのtimestampformat属性を指定した場合には,recordsタグでの指定内容が有効になります。
形式番号として指定できる値の意味を次の表に示します。
形式番号 文字列表現の形式 形式
1(デフォルト値) 年-月-日 時:分:秒.ミリ秒(1〜9けた) yyyy-MM-dd HH:mm:ss.fffffffff
2※1 月名※2 日 時:分:秒 MMM dd HH:mm:ss
3 年/月/日 時:分:秒.ミリ秒(3けた) yyyy/MM/dd HH:mm:ss.SSS
4 日/月名※2/年:時:分:秒 dd/MMM/yyyy:HH:mm:ss
注※1
形式番号2は,形式に年がありません。このため,入力アダプターで形式番号2を指定する場合には,year属性およびmonth属性で開始年月を指定してください。出力アダプターで形式番号2を指定する場合には,year属性およびmonth属性は指定できません。
なお,year属性およびmonth属性を指定しない場合,標準提供アダプターの起動時点のシステムの年月がTIMESTAMP型の開始年月となります。
注※2
英字3けたの英語の月名です。Jan(1月),Feb(2月),Mar(3月),Apr(4月),May(5月),Jun(6月),Jul(7月),Aug(8月),Sep(9月),Oct(10月),Nov(11月),Dec(12月)です。

year="<開始年>"
timestampformat属性で2を指定した場合,この属性でTIMESTAMP型の開始年を指定します。年は,1970〜2261の整数で指定します。この属性は,出力アダプターの場合には指定できません。
TIMESTAMP型の開始年月の指定については,「(4) TIMESTAMP型の開始年月の指定」を参照してください。
month="<開始月>"
timestampformat属性で2を指定した場合,この属性でTIMESTAMP型の開始月を指定します。年は,1〜12の整数で指定します。この属性は,出力アダプターの場合には指定できません。
TIMESTAMP型の開始年月の指定については,「(4) TIMESTAMP型の開始年月の指定」を参照してください。
recordsタグ(レコード群定義)
レコード群の情報を定義します。この定義は必ず1個だけ記述します。この定義は省略できません。
recordタグ(レコード定義)
各レコードの情報を定義します。この定義は10個まで記述できます。この定義は省略できません。
name="<レコード名>"
レコードの情報を識別するための名称を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
レコード名は,recordsタグ内で一意となるように指定してください。この属性は省略できません。
exp="<レコード構成>"
レコードを構成するフィールドを1〜1,000,000文字で指定します。
レコード構成内に,このレコード固有の区切り文字を指定できます。また,フィールドごとに異なる区切り文字を指定することもできます。この属性は省略できません。
レコード構成の記述形式については,「(5) レコード構成の記述形式」を参照してください。
timestampformat="<形式番号>"
TIMESTAMP型の形式番号を1〜4の整数で指定します。省略した場合,formatタグのtimestampformat属性の指定値が仮定されます。
なお,formatタグのtimestampformat属性を指定し,かつrecordsタグのtimestampformat属性を指定した場合には,recordsタグでの指定内容が有効になります。
形式番号として指定できる値の意味については,formatタグのtimestampformat属性の説明を参照してください。
year="<開始年>"
timestampformat属性で2を指定した場合,この属性でTIMESTAMP型の開始年を指定します。年は,1970〜2261の整数で指定します。この属性は,出力アダプターの場合には指定できません。
TIMESTAMP型の開始年月の指定については,「(4) TIMESTAMP型の開始年月の指定」を参照してください。
month="<開始月>"
timestampformat属性で2を指定した場合,この属性でTIMESTAMP型の開始月を指定します。年は,1〜12の整数で指定します。この属性は,出力アダプターの場合には指定できません。
TIMESTAMP型の開始年月の指定については,「(4) TIMESTAMP型の開始年月の指定」を参照してください。
fieldタグ(フィールド定義)
フィールド情報を定義します。この定義は3,000個まで記述できます。この定義は省略できません。
name="<フィールド名>"
フィールドの情報を識別するための名称を1〜100文字の半角英数字,およびアンダーライン(_)で指定します。先頭の文字に指定できるのは,半角英字だけです。
フィールド名は,recordsタグ内で一意となるように指定してください。この属性は省略できません。
type="{INT|SHORT|BYTE|LONG|BIG_DECIMAL|FLOAT|DOUBLE|STRING|DATE|TIME|TIMESTAMP}"
フィールドのJavaのデータ型に対応するデータ型を指定します。この属性は省略できません。
この属性に指定する値と,対応するJavaのデータ型およびCQLのデータ型については,「(6) type属性の指定値と,対応するJavaのデータ型およびCQLのデータ型」を参照してください。
pattern="<パターン>"
type属性にSTRINGを指定した場合,フィールド値のパターンを正規表現で指定します。正規表現の解析には,java.util.regex.Patternクラスを使用します。このため,正規表現は,java.util.regex.Patternクラスがサポートする正規表現の範囲で記述してください。「$」は使用できません。
なお,type属性にSTRING以外を指定している場合,または出力アダプターで定義している場合には,この属性は指定できません。指定した場合は,エラーとなります。
パターンには定数が指定できます。パターンに定数が指定された場合,フィールド値を定数として扱います。
この属性を省略した場合のデータ型種別の表記規則については,「(7) データ型種別の表記規則」を参照してください。

(3) 記述例

<?xml version="1.0" encoding="UTF-8"?>
<root:AdaptorCompositionDefinition
xmlns:form="http://www.hitachi.co.jp/soft/xml/sdp/adaptor/definition/callback/FormatDefinition">
<!-- 途中略 -->
 
<!-- 編集用CB定義 -->
<cb:DataEditCBDefinition class="jp.co.Hitachi.soft.sdp.adaptor.callback.dataedit.formattranslate.InputFormatTranslatorCBImpl" name="editor1">
  <!-- フォーマット変換定義 -->
  <form:FormatDefinition ioType="INPUT">
    <form:common/>
      <!-- レコード群定義 -->
      <form:records>
        <form:record name="R1" exp="($_F1),($_F2),($_F3),($_F4),($_F5)">
        <!-- フィールド定義 -->
          <form:field name="F1" type="INT"/>
          <form:field name="F2" type="STRING" pattern="[^,]*"/>
          <form:field name="F3" type="STRING" pattern="[A-Z]+.[A-Z]+"/>
          <form:field name="F4" type="INT"/>
          <form:field name="F5" type="INT"/>
        </form:record>
      </form:records>
  </form:FormatDefinition>
</cb:DataEditCBDefinition>

(4) TIMESTAMP型の開始年月の指定

入力アダプターでformatタグのtimestampformat属性に形式番号2を指定し,formatタグのyear属性およびmonth属性を指定した場合には,次のようにTIMESTAMP型のフィールドの開始年月が決定されます。

なお,二つ目以降の入力レコードの開始年月は,入力レコードのフィールドの月の値を基準年月と比較して,次のように決定されます。

基準年月をY年4月とした場合の例を次の図に示します。入力レコードのフィールドの月の値が3〜12の場合,フィールドの年の値はYとなります。月の値が1または2の場合,フィールドの年の値はY+1となります。

図9-3 基準年月をY年4月とした場合

[図データ]

基準年月をY年1月とした場合の例を次の図に示します。入力レコードのフィールドの月の値が12の場合,フィールドの年の値はY−1となります。月の値が1〜11の場合,フィールドの年の値はYとなります。

図9-4 基準年月をY年1月とした場合

[図データ]

(5) レコード構成の記述形式

recordタグのexp属性で指定するレコード構成の記述形式について説明します。

記述形式を次に示します。

{〔<区切り文字指定>〕($<フィールド名指定>)〔<区切り文字指定>〕
 |〔<区切り文字指定>〕($<フィールド名指定>)〔<区切り文字指定>〕…}
<区切り文字指定>
このレコードを構成する個々のフィールドを区切る文字列を指定します。FormatDefinitionタグのioType属性がINPUTの場合,文字列として正規表現が使用できます。正規表現で特別な意味を持つ文字(「(」,「)」,「[」,「]」,「{」,「}」,「-」,「|」,「/」,「\」,「.」,「*」,「?」,「+」,「^」,「$」)を本来の文字として指定するには,円記号(\)でエスケープする必要があります。
FormatDefinitionタグのioType属性がOUTPUTの場合,文字列として正規表現を使用できません。そのため,正規表現で特別な意味を持つ文字に対してエスケープする必要はありません。
<フィールド名指定>
このレコードを構成する個々のフィールド名を指定します。

レコード構成の記述規則を次に示します。

レコード構成の記述例を次に示します。

記述例1
  • フィールドF1〜F5という五つのフィールドがある。
  • すべてのフィールドは,コンマ「,」で区切られている。
このようなレコードのレコード構成は次のように記述します。
"($_F1),($_F2),($_F3),($_F4),($_F5)"
記述例2
  • フィールドF1〜F3という三つのフィールドがある。
  • レコードの先頭が「<」で始まる。
  • フィールドF1とフィールドF2が「> MSG」の区切り文字で区切られている。
  • フィールドF2とフィールドF3が半角スペースの区切り文字で区切られている。
このようなレコードのレコード構成は次のように記述します。
"&lt;($_F1)&gt; MSG($_F2) ($_F3)"
「<」と「>」は特殊文字のため,それぞれ「&lt;」および「&gt;」に置き換えます。

(6) type属性の指定値と,対応するJavaのデータ型およびCQLのデータ型

fieldタグのtype属性の指定値と,対応するJavaのデータ型およびCQLのデータ型を次の表に示します。

なお,各データ型の表記規則については,fieldタグのpattern属性の各データ型種別の表記規則の説明を参照してください。また,CQLのデータ型については,マニュアル「uCosminexus Stream Data Platform - Application Framework アプリケーション開発ガイド」を参照してください。

表9-12 type属性の指定値と,対応するJavaのデータ型およびCQLのデータ型

項番 データ型種別
(type属性の指定値)
分類 データ形式 Javaのデータ型 CQLのデータ型
1 INT 数値データ 整数型4バイト プリミティブ型int INT〔EGER〕
2 SHORT 整数型2バイト プリミティブ型short SMALLINT
3 BYTE 整数型1バイト プリミティブ型byte TINYINT
4 LONG 整数型8バイト プリミティブ型long BIGINT
5 BIG_DECIMAL 固定小数点数 java.math.BigDecimalクラス DEC〔IMAL〕※1
NUMERIC※1
6 DECIMAL(m)※2
NUMERIC(m)※2
7 FLOAT 実数型4バイト プリミティブ型float REAL
8 DOUBLE 実数型8バイト プリミティブ型double FLOAT
DOUBLE
9 STRING 文字データ 文字列 java.lang.Stringクラス CHAR〔ACTER〕※3
10 CHAR〔ACTER〕(n)※4
VARCHAR(p)※5
11 DATE 日付/時刻データ 日付(年月日) java.sql.Dateクラス DATE
12 TIME 時間(時分秒) java.sql.Timeクラス TIME
13 TIMESTAMP 日時(年月日+時分秒+ナノ秒) java.sql.Timestampクラス TIMESTAMP※6
14 TIMESTAMP〔(q)〕※7
注※1
けた数として15を仮定します。けた数が15を超える場合,タプル送信時にエラーとなります。
注※2
mは正整数で,1≦m≦38です。けた数がmを超える場合,タプル送信時にエラーとなります。
注※3
文字数として1を仮定します。文字数が1を超える場合,タプル送信時にエラーとなります。
注※4
nは正整数で,1≦n≦255です。文字数がnを超える場合,タプル送信時にエラーとなります。
注※5
pは正整数で,1≦p≦32767です。文字数がpを超える場合,タプル送信時にエラーとなります。
注※6
年月日+時分秒+ミリ秒(3けた)を仮定します。ミリ秒以上の精度を指定した場合,タプル送信エラーとなります。
注※7
qは整数で,0≦q≦9です。qは小数秒以下のけた数を示します。けた数にq以上の精度を指定した場合,タプル送信エラーとなります。

(7) データ型種別の表記規則

fieldタグのpattern属性を省略した場合のデータ型種別の表記規則を次の表に示します。

表9-13 fieldタグのpattern属性を省略した場合のデータ型種別の表記規則

項番 データ型種別
(type属性の指定値)
各データ型のパターン
(正規表現)
説明 変更の可否
1 INT "〔-〕{0,1}〔0-9〕+" 先頭がマイナス(-)の符号が0回または1回出現し,さらに0〜9の数字が1回以上繰り返される文字列のパターンです。 ×
2 SHORT ×
3 BYTE ×
4 LONG ×
5 BIG_DECIMAL "〔-〕{0,1}〔0-9〕+\.〔0-9〕+" 次の文字列のパターンです。
  • 先頭がマイナス(-)の符号が0回または1回出現します。
  • 0〜9の数字が1回以上繰り返されます。
  • ピリオド(.)を挟んで,0〜9の数字が1回以上繰り返されます。
×
6 FLOAT "〔-〕{0,1}〔0-9〕+\.〔0-9〕+" 次の文字列のパターンです。
  • 先頭がマイナス(-)の符号が0回または1回出現します。
  • 0〜9の数字が1回以上繰り返されます。
  • ピリオド(.)を挟んで,0〜9の数字が1回以上繰り返されます。
×
7 DOUBLE ×
8 STRING "〔^, ;〕*" スペース,コンマ(,),およびセミコロン(;)を除く任意の文字が繰り返される文字列のパターンです。
データ型種別がSTRINGの場合,パターンの変更(指定)ができます。
パターン変更(指定)例
区切り文字にピリオド(.)だけを使用する場合
"〔^ .〕+"
9 DATE "〔0-9〕{1,4}-〔0-9〕{1,2}-〔0-9〕{1,2}" yyyy-mm-dd形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • yyyy:0〜9999の数字
  • mm:0〜99の数字
  • dd:0〜99の数字
mm,ddがそれぞれMM,DDの指定範囲外の値の場合,エラーメッセージKFSP46322-Eが出力されます。
×
10 TIME "〔0-9〕{1,2}:〔0-9〕{1,2}:〔0-9〕{1,2}" hh:mm:ss形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • hh:0〜99の数字
  • mm:0〜99の数字
  • ss:0〜99の数字
hh,mm,ssがそれぞれHH,MM,SSの指定範囲外の値の場合,java.sql.Timeの仕様に準拠して正規の時刻に換算します。
(例)
16:22:66→16:23:06
×
11 TIMESTAMP 条件によって異なります。詳細については「表9-14 データ型種別がTIMESTAMPの場合の表記規則」を参照してください。 条件によって異なります。詳細については「表9-14 データ型種別がTIMESTAMPの場合の表記規則」を参照してください。 ×
(凡例)
○:変更できます。
×:変更できません。
注※
pattern属性を指定することで,各データ型種別の文字列のパターンを変更できるかどうかを表します。

表9-14 データ型種別がTIMESTAMPの場合の表記規則

条件 各データ型のパターン
(正規表現)
説明
timestampformat属性の値が1の場合 "[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}
\.[0-9]{1,9}"
yyyy-mm-dd hh:mm:ss.fffffffff形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • yyyy:0〜9999の数字
  • mm:0〜99の数字
  • dd:0〜99の数字
  • hh:0〜99の数字
  • mm:0〜99の数字
  • ss:0〜99の数字
  • fffffffff:0〜999999999の数字
timestampformat属性の値が2の場合 "[A-Za-z]{3}[ ]+[0-9]{1,2}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}" MMM dd HH:mm:ss形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • MMM:A〜Z,a〜zの英字(3けたの英語の月名)
  • dd:0〜99の数字
  • HH:0〜99の数字
  • mm:0〜99の数字
  • ss:0〜99の数字
timestampformat属性の値が3の場合 "[0-9]{1,4}/[0-9]{1,2}/[0-9]{1,2}[ ]+[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}\.[0-9]{3}" yyyy/MM/dd HH:mm:ss.SSS形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • yyyy:0〜9999の数字
  • MM:0〜99の数字
  • dd:0〜99の数字
  • HH:0〜99の数字
  • mm:0〜99の数字
  • ss:0〜99の数字
  • SSS:000〜999の数字
timestampformat属性の値が4の場合 "[0-9]{1,2}/[A-Za-z]{3}/[0-9]{1,4}:[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}" dd/MMM/yyyy:HH:mm:ss形式の文字列のパターンです。ただし,指定できる文字は次の範囲とし,けた数だけチェックします。
  • dd:0〜99の数字
  • MMM:A〜Z,a〜zの英字(3けたの英語の月名)
  • yyyy:0〜9999の数字
  • HH:0〜99の数字
  • mm:0〜99の数字
  • ss:0〜99の数字
注※
mm,dd,hh,mm,ssがそれぞれMM(月),DD,HH,MM(分),SSの指定範囲外の値の場合,java.sql.Timestampの仕様に準拠して正規の年月日時刻に換算します。
(例)
2001-13-10 16:22:66.101→2002-01-10 16:23:06.101