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

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

11.2.2 ファイルの入力のデータ処理の流れ

入力アダプターでのファイルの入力のデータ処理の流れと処理の内容を次の図に示します。

図11-2 ファイルの入力のデータ処理の流れと処理の内容

[図データ]

入力アダプターで扱うデータ形式について,「(1) 入力アダプターで扱うデータ形式」で説明します。また,各処理の詳細について,「(2) ファイル入力コネクターによるファイルの入力」以降で説明します。

<この項の構成>
(1) 入力アダプターで扱うデータ形式
(2) ファイル入力コネクターによるファイルの入力
(3) フォーマット変換
(4) マッピング
(5) タプル送信

(1) 入力アダプターで扱うデータ形式

入力アダプターで扱うデータ形式には,入力形式レコード,および共通形式レコードがあります。それぞれのデータ形式について説明します。

入力形式レコード
入力ファイルから取得した,行単位のデータのことです。入力アダプターでは,1行のデータを1入力形式レコードとして扱います。
共通形式レコード
複数のフィールド名とその値であるフィールド値から成る,データの集合のことです。フィールド名とは,入力形式レコードから意味のある単位(フィールド)に切り出したデータに付けた名前で,フィールド値とはその値のことを指します。
共通形式レコードは,入力アダプターおよび出力アダプター内部で扱う共通のデータ形式です。
標準提供アダプターでは,共通形式レコードの複数のフィールド名とそれぞれに対応するフィールド値の組み合わせをレコード構成として管理し,レコード名で識別します。

図11-3 共通形式レコードの構成

[図データ]

(2) ファイル入力コネクターによるファイルの入力

ファイル入力についての定義は,アダプター構成定義ファイルのファイル入力コネクター定義で定義します。

ファイル入力コネクターでは,入力ファイル格納ディレクトリに格納されている一つ以上のファイルから行単位でデータを読み込んで,入力形式レコードに変換します。ファイル入力コネクターで読み込んだ1行のデータが,1入力形式レコードとなります。

なお,入力アダプターでは複数の入力形式レコードを一度に読み込むことができます。ファイル入力コネクターで読み込んだ入力形式レコード数が,フォーマット変換,マッピング,タプル送信の各処理で一度に処理するレコード数となります。

ここでは,ファイル入力コネクターで読み込む入力ファイルの種類や構成などについて説明します。

ファイルの種類
ファイル入力コネクターで読み込む入力ファイルは,文字データだけで構成されたテキストファイルです。レコードは可変長です。
ファイル構成
ファイル入力コネクターで読み込む入力ファイルは,次のファイル構成のファイルです。
ファイル構成 説明 前提条件
ラップアラウンド 入力対象のファイル数が固定されている場合に,設定されたファイルの順番に情報を書き込むファイル構成です。すべてのファイルの書き込みが完了すると,最初のファイルを更新して書き込みます。 情報を書き込むファイルの順番が決まっていて,必ずその順番で書き込みます。
書き込みが完了したファイルに書き込む場合は,データをクリアしてから新しい情報を書き込みます。
非ラップアラウンド 入力対象のファイル数が固定されていない場合に,設定されたファイルの順番に情報を書き込むファイル構成です。 情報を書き込むファイルの順番が決まっていて,必ずその順番で書き込みます。
また,レコードおよびファイルの生成順序は時系列である必要があります。
ファイル名
ファイル入力コネクターで読み込むファイルは,ファイル入力コネクター定義のfileタグのname属性で,ファイル名または通番で指定します。name属性については,「9.10.1 ファイル入力コネクター定義」を参照してください。
ファイルを読み込む順番
ファイル入力コネクターは,ファイル入力コネクター定義のfileタグのname属性で指定したファイル名の順番,または入力ファイルの更新時刻の順番で入力ファイルを読み込みます。ファイルの読み込み順は,inputタグのreadOrder属性で指定します。
なお,入力ファイルの更新時刻が等しい場合,読み込みの順番は保証されません。
ファイル読み込み処理モード
ファイル入力コネクターがファイルを読み込む方式には,バッチ処理モードリアルタイム処理モードがあります。それぞれの処理モードについて次の表に示します。なお,どちらの処理モードの場合も,読み込みが完了すると入力アダプターが自動で停止します。
処理モード 読み込み処理の内容
読み込み方式 読み込み完了条件
バッチ処理モード 入力アダプターの起動時に,入力ファイル格納ディレクトリに入力ファイルがあるかどうかを確認して,入力ファイルがあった場合に読み込み処理をします。 次の条件のどちらかに一致した時点で,読み込みを完了します。
  • 入力アダプターの起動時に,入力ファイル格納ディレクトリにあった,すべてのファイルの読み込みが完了したとき。
  • 定義に指定したすべてのファイルの読み込みが完了したとき。
リアルタイム処理モード 入力ファイル格納ディレクトリを一定間隔で監視し,入力ファイルが出現した時点で,逐次読み込み処理をします。
入力ファイル格納ディレクトリの監視間隔,および監視回数はファイル入力コネクター定義のinputタグで定義します。監視回数を超えた場合は,警告メッセージを出力したあと,処理を続行します。
次の条件のどちらかに一致した時点で,読み込みを完了します。
  • 入力ファイルを通番で指定する場合:通番の最後に当たるファイルの読み込みが完了したとき。
  • 入力ファイルをファイル名で指定する場合:定義に指定したすべてのファイルの読み込みが完了したとき。
ファイル入力コネクターの動作中に,入力ファイルを入力ファイル格納ディレクトリにコピーまたは移動中の場合,ファイル入力コネクターは1秒間待機したあと,再度ファイルの読み込み処理をします。この処理は読み込みができるまで,最大5回繰り返し,読み込みができない場合はメッセージKFSP46200-Eが出力されます。
また,入力ファイル格納ディレクトリで入力ファイルを新規作成,または入力ファイルに追加の書き込みがあった場合,新規作成または追加書き込みしたレコードに読み込まれません。

(3) フォーマット変換

フォーマット変換についての定義は,アダプター構成定義ファイルのフォーマット変換定義で定義します。

フォーマット変換では,入力形式レコードから意味のある単位(フィールド)に切り出して,共通形式レコードに変換します。

入力形式レコードから共通形式レコードへのフォーマット変換の例を次の図に示します。この例では,入力形式レコードは,空白で区切られた三つのフィールドで構成され,第1フィールドはTIME型,第2,3フィールドは文字列型にフォーマット変換されます。

図11-4 入力形式レコードから共通形式レコードへのフォーマット変換の例

[図データ]

この図の場合の共通形式レコードのレコード構成と指定するフォーマット変換定義のタグを次の表に示します。

レコード構成 タグ
レコード名:R1
レコード構成:($_time)△($_method)△($_url)
recordタグ(レコード定義)
フィールド名:time,型:TIME fieldタグ(フィールド定義)
フィールド名:method,型:STRING
フィールド名:url,型:STRING
(凡例)
△:半角スペース

変換できるデータ型および共通形式レコードのレコード構成の設定については,「9.11.1 フォーマット変換定義」を参照してください。

なお,フォーマット変換では,複数のレコード構成を定義できます。複数のレコード構成が定義された場合は,どのレコード構成に該当するかを自動で選択してフォーマット変換します。

複数のレコード構成が定義された場合,レコード構成は次のように選択されます。

  1. ファイル入力コネクターで読み込んだ入力形式レコードの構成が,フォーマット変換定義のrecordタグで指定したレコード構成に一致するかどうかを,レコード構成を定義した順にチェックします。一致した最初のレコード構成を選択します。
  2. 1.で一致するレコード構成がない場合,入力形式レコードは破棄されます。この場合,入力アダプターはフォーマット変換定義のunmatchedFormatタグで定義された,次のどれかの処理をします。
    • 処理を続行します。
    • 警告メッセージを出力し,処理を続行します。
    • エラーメッセージを出力し,入力アダプターを停止します。

 

参考
フォーマット変換のあとには,レコードのフィルタリング,レコードの抽出,およびレコード間のマッピングが順不同で実施できます。必要に応じて実施してください。
レコードのフィルタリングについては,「11.4 レコードのフィルタリング」を参照してください。レコードの抽出については,「11.5 レコードの抽出」を参照してください。また,レコード間のマッピングについては,「(4) マッピング」を参照してください。

(4) マッピング

マッピングについての定義は,アダプター構成定義ファイルのマッピング定義で定義します。

マッピングには,レコードとストリーム間のマッピング,およびレコード間のマッピングがあります。それぞれのマッピングの概要を次の表に示します。

表11-2 マッピングの概要

項番 マッピングの種類 説明
1 レコードとストリーム間のマッピング マッピングの前のコールバックで出力される共通形式レコード(マッピングの変換元)と,入力ストリームの形式に従った共通形式レコード(マッピングの変換先)との関連づけをします。
レコードとストリーム間のマッピングは,タプル送信の前に必ず実施します。
2 レコード間のマッピング マッピングの前のコールバックで出力される共通形式レコード(マッピングの変換元)を編集し,マッピングの変換先の共通形式レコードに変換します。
レコード間のマッピングは,フォーマット変換のあと,かつレコードとストリーム間のマッピングの前に,必要に応じて実施します。
マッピングの変換元の共通形式レコードのフィールド名を変更したい場合や,複数のフィールドから次のコールバックの処理に不要なフィールドを削除したい場合などに使用できます。
また,組み込み関数を使用して,マッピングの変換元の共通形式レコードから文字列や時刻を取得し,取得した文字列や時刻をマッピングの変換先の共通形式レコードに反映することもできます。
なお,レコード間のマッピングは複数定義できます。
注※
レコード間のマッピングで使用できる組み込み関数は,アダプター構成定義ファイルのmapタグのfunction属性で指定します。function属性で指定できる組み込み関数については,「9.11.2 マッピング定義」を参照してください。

入力アダプターでのレコードとストリーム間のマッピングの例を次の図に示します。この例では,入力ストリームs1に必要なtimeフィールドとurlフィールドを入力ストリームのスキーマにマッピングして,共通形式レコード(マッピングの変換先)に変換しています。

図11-5 入力アダプターでのレコードとストリーム間のマッピングの例

[図データ]

(5) タプル送信

タプル送信についての定義は,アダプター構成定義ファイルの入力ストリーム定義に定義します。

タプル送信では,マッピング結果を基に,共通形式レコードをタプルに変換したあとで,入力ストリーム定義に従って入力ストリームにタプルを送信します。

入力アダプターから入力ストリームへのタプル送信の例を次の図に示します。この例では,入力ストリームs1にタプルを送信します。

図11-6 入力アダプターからのタプル送信の例

[図データ]