ストリームデータ処理基盤 uCosminexus Stream Data Platform - Application Framework システム構築・運用ガイド
<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>
- 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) データ型種別の表記規則」を参照してください。
<?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>
入力アダプターでformatタグのtimestampformat属性に形式番号2を指定し,formatタグのyear属性およびmonth属性を指定した場合には,次のようにTIMESTAMP型のフィールドの開始年月が決定されます。
- 入力アダプター起動直後の一つ目の入力レコード
formatタグのyear属性およびmonth属性で指定した値が,TIMESTAMP型のフィールドの開始年月となります。
- 二つ目以降の入力レコード
前回の入力レコードのTIMESTAMP型のフィールドの年月を基準年月として,開始年月を決定します。
なお,二つ目以降の入力レコードの開始年月は,入力レコードのフィールドの月の値を基準年月と比較して,次のように決定されます。
- 「入力レコードのフィールドの月の値 >= 基準年月の前の月」の場合
基準年月の年がフィールドの年の値となります。ただし,基準年月の前の月が12月で,かつフィールドの月の値が12月の場合は,基準年月の前の年がフィールドの年の値となります。
- 「入力レコードのフィールドの月の値 < 基準年月の先月」の場合
基準年月の翌年がフィールドの年の値となります。ただし,基準年月の前の月が12月の場合は,基準年月の年がフィールドの年の値となります。
基準年月を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月とした場合
recordタグのexp属性で指定するレコード構成の記述形式について説明します。
記述形式を次に示します。
{〔<区切り文字指定>〕($<フィールド名指定>)〔<区切り文字指定>〕
|〔<区切り文字指定>〕($<フィールド名指定>)〔<区切り文字指定>〕…}
- <区切り文字指定>
- このレコードを構成する個々のフィールドを区切る文字列を指定します。FormatDefinitionタグのioType属性がINPUTの場合,文字列として正規表現が使用できます。正規表現で特別な意味を持つ文字(「(」,「)」,「[」,「]」,「{」,「}」,「-」,「|」,「/」,「\」,「.」,「*」,「?」,「+」,「^」,「$」)を本来の文字として指定するには,円記号(\)でエスケープする必要があります。
- FormatDefinitionタグのioType属性がOUTPUTの場合,文字列として正規表現を使用できません。そのため,正規表現で特別な意味を持つ文字に対してエスケープする必要はありません。
- <フィールド名指定>
- このレコードを構成する個々のフィールド名を指定します。
レコード構成の記述規則を次に示します。
- 区切り文字指定に対するダブルクォーテーション(")は不要です。
- フィールド名の指定の先頭には「($_」を,末尾には「)」を指定してください。
- フィールド名の指定では,このレコードを構成するすべてのフィールド名を指定してください。
- fieldタグでは,このレコードを構成するフィールド名を左から順番に指定してください。
- フィールド名の指定では,このレコードを構成するフィールド名を重複して指定できません。また,このレコードを構成するフィールド名以外のフィールド名は指定できません。
- 特殊文字を使用する場合は,文字を置換してください。文字の置換については,「9.2 アダプター用定義ファイル作成上の注意事項」の特殊文字(記号)の対応表を参照してください。
レコード構成の記述例を次に示します。
- 記述例1
- フィールドF1〜F5という五つのフィールドがある。
- すべてのフィールドは,コンマ「,」で区切られている。
- このようなレコードのレコード構成は次のように記述します。
"($_F1),($_F2),($_F3),($_F4),($_F5)"
- 記述例2
- フィールドF1〜F3という三つのフィールドがある。
- レコードの先頭が「<」で始まる。
- フィールドF1とフィールドF2が「> MSG」の区切り文字で区切られている。
- フィールドF2とフィールドF3が半角スペースの区切り文字で区切られている。
- このようなレコードのレコード構成は次のように記述します。
"<($_F1)> MSG($_F2) ($_F3)"
- 「<」と「>」は特殊文字のため,それぞれ「<」および「>」に置き換えます。
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以上の精度を指定した場合,タプル送信エラーとなります。
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
All Rights Reserved. Copyright (C) 2010, 2014, Hitachi, Ltd.