ストリーム
ここでは、ストリームについてさらに詳しく説明します。
ストリームコンテナ
コンテナとは、複数のストリームを1つのストリームにまとめるものです。 例えば、FileGetコンポーネントで「ループを開始」プロパティを「いいえ」、「ファイルパス」プロパティを「*.csv」と指定し、それにマッチするファイルが3つあった場合、3つのストリームが1つにまとめられ、コンテナとして出力されます。つまり、それぞれ3行、5行、10行のレコードを持つ3つのCSVストリームがコンテナ化された場合、Mapperコンポーネントでは18行のレコードを持つCSVストリームとして扱うことができます。以下のフローで、FileGetコンポーネントの出力は18行のCSVストリームとして扱うことができます。

コンテナには以下の特徴があります。
- ストリーム型、ストリームプロパティ、フィールド定義を共有する
- レコードに透過的にアクセスできる
コンテナはすべてのコンポーネントで入力可能ではありません。 コンテナが入力不可のコンポーネントにコンテナが入力された場合、エラーとなります。 逆にコンテナを展開して使用するコンポーネントも存在します。例えば、SimpleMailコンポーネントでファイルを添付する場合、コンテナ内のストリームの1つ1つを添付ファイルとして使用します。
ストリーム型の変換
ストリーム型の変換とは、あるストリームを別の形式のストリームとして読み替えることです。この機能を使うと、例えばCSVストリームをBinaryストリームに変換することで、CSVストリーム全体をフロー変数に格納したりすることができます。各ストリームはConverterコンポーネントにより他のストリームに変換することができるものとできないものがあります。
メモ
単一フィールドのストリーム(MIME、HTML、TEXT、Binary)以外の複数フィールドが定義できるストリーム型から、同じく複数フィールドが定義できるストリーム型へ変換する場合、フィールドの数と名前を変更することはできません。
入力\出力 | Binary (※1) | Text (※2) | HTML (※3) | CSV | Fixed | XML | Record | Parameter | MIME (※8) | JSON |
---|---|---|---|---|---|---|---|---|---|---|
Binary | ○ | ○ | ○ | ○ (※4) | ○ (※6) | ○ (※7) | × | × | ○ | ○ *10 |
Text | ○ | ○ | ○ | ○ (※4) | ○ (※6) | ○ (※7) | × | × | ○ | ○ *10 |
HTML | ○ | ○ | ○ | × | × | ○ (※7) | × | × | ○ | × |
CSV | ○ | ○ | × | ○ (※5) | ○ (※5) | × | ○ (※5) | × | ○ | ○ *11 |
FixedLength | ○ | ○ | × | ○ (※5) | ○ (※5) | × | ○ (※5) | × | ○ | ○ *11 |
XML | ○ | ○ | ○ | × | × | ○ (※9) | × | × | ○ | ○ *9 |
Record | ○ | ○ | × | ○ (※5) | ○ (※5) | ○ (※1) | ○ (※5) | × | ○ (※1) | ○ *11 |
ParameterList | ○ | ○ | × | ○ (※5) | ○ (※5) | ○ (※1) | ○ (※5) | × | ○ (※1) | ○ *11 |
MIME | ○ | ○ | × | × | × | × | × | × | ○ | × |
JSON | ○ | ○ | × | × | × | ○ *9 | × | × | ○ | ○ *9 |
※1 ストリームのバイナリ値が使用されます。
※2 ストリームの文字列値が使用されます。
※3 HTMLとしての正当性はチェックされません。
※4 入力がCSV形式である場合。
※5 フィールドの対応は名前ではなくインデックスでとられます。また、フィールド定義を変更することはできません。
※6 入力がフィールド定義にそっている場合。
※7 入力がXML形式である場合。
※8 MIMEへの変換はストリーム型に合わせて適切なMIMEヘッダーがつけられます。
※9 入力ストリームがそのまま出力されます。指定したフィールド定義のXMLまたはJSONへと構造が変換されることはありません。
*10 入力がJSON形式である場合。
*11 入力がCSV, FixedLength, またはRecordの場合JSON配列に変換されます。入力がParameterListの場合はJSONオブジェクトに変換されます。
ストリームのデータ表現
すべてのストリームでは、そのデータ内容の表現方法として以下の3種類の表現方法を持っています。
- バイナリ表現
- 文字列表現
- レコード表現
コンポーネントはこれらのいずれかの方法を用いてストリームを操作します。例えば、FilePutコンポーネントはストリームのバイナリ表現を使用してストリームをファイル化します。Mapperコンポーネントはストリームの各フィールドのマッピングをグラフィカルにするときにレコード表現を用います。Velocityコンポーネントでは文字列表現とレコード表現の両方の表現方法を使用することができます。
JSON
- バイナリ表現
JSON文字列のutf-8バイト列になります。 - 文字列表現
JSONの文字列そのものです。エンコーディングは常にutf-8になります。 - レコード表現
フィールド定義はフィールド名とデータ型の他に、フィールドを配列にするかどうかを指定します。
XML
- バイナリ表現
「出力エンコーディング」プロパティに従ったXMLのバイト列になります。 - 文字列表現
XMLの文字列そのものです。XML宣言には「出力エンコーディング」プロパティで指定したエンコーディング識別子が入ります。 - レコード表現
フィールド定義はフィールド名とデータ型の他に、要素の繰返しとノードタイプを指定します。
CSV
- バイナリ表現
文字列値を「出力エンコーディング」プロパティに従ってバイト列化した値です。 - 文字列表現
ストリーム自身です。 - レコード表現
フィールド定義はフィールド名とデータ型のみの指定になります。
FixedLength
- バイナリ表現
フィールド定義、「出力エンコーディング」プロパティに従ったストリームのバイト列になります。 - 文字列表現
フィールド定義、「出力エンコーディング」プロパティに従ったストリームの文字列になります。
※フィールド中にBinary型、ZonedDecimal型、PackedDecimal型がある場合は正しく文字列化できません。 - レコード表現
FixedLengthストリームのフィールド定義はフィールド名とデータ型の他に、開始位置、フィールド長、小数点位置を指定します。
Record
- バイナリ表現
レコード内容をフローサービス独自のXML形式にしたものです。 - 文字列表現
レコード内容をフローサービス独自のXML形式にしたものです。 - レコード表現
フィールド定義はフィールド名とデータ型のみの指定になります。
ParameterList
- バイナリ表現
パラメーター内容をフローサービス独自のXML形式にしたものです。 - 文字列表現
パラメーター内容をフローサービス独自のXML形式にしたものです。 - レコード表現
フィールド定義はフィールド名とデータ型のみの指定になります。データ型にはStringの配列が使用できます。
MIME
- バイナリ表現
ストリーム自身のバイト列です。 - 文字列表現
ストリーム内容を強制的に文字列化したものです。主パートにContent-Typeのパラメーターとしてcharsetが指定されている場合、文字列化の際にそのエンコーディングが使用されます。charsetが指定されていない場合、プラットフォームのエンコーディングによって文字列化されます。その場合、MIMEの内容によっては必ずしも正しく文字列化されない場合があります。
Text、HTML
- バイナリ表現
文字列値を「出力エンコーディング」プロパティに従ってバイト列化した値です。 - 文字列表現
ストリーム自身です。 - レコード表現
String型の単一フィールドを持つ単一レコードです。
Binary
- バイナリ表現
ストリーム自身のバイト列です。 - 文字列表現
ストリームの16進ダンプです。 - レコード表現
Binary型の単一フィールドを持つ単一レコードです。
データ型の変換
Mapperコンポーネントでのフィールドや変数への値代入では、データ型は可能な限り暗黙変換されます。変換できない値が入力された場合はエラーが発生します。
入力\出力 | Boolean | Integer | Decimal | Double | String | Binary※1 | DateTime |
---|---|---|---|---|---|---|---|
Boolean | - | ○※2 | ○※2 | ○※2 | ○※3 | ○ | × |
Integer | ○※4 | - | ○ | ○ | ○ | ○ | ○※5 |
Decimal | ○※4 | ○ | - | ○ | ○ | ○ | ○※5 |
Double | ○※4 | ○※11 | ○ | - | ○ | ○ | ○※5 |
String | ○※6 | △※9 | △※9 | △※9 | - | ○ | △※10 |
Binary ※7 | ○ | △ | △ | △ | ○ | - | △ |
DateTime | × | ○※5 | ○※5 | ○※5 | ○※8 | ○ | - |
○=変換可能、△=フォーマットに依存、×=変換不可
※1 Binaryへの変換は一度Stringに変換されてから、システムのエンコーディングでバイト列化されます(プラットフォーム依存性に注意してください)。
※2 True=1, False=0
※3 True="true", False="false"
※4 0=False, それ以外はTrue
※5 DateTime型は1970 年1月1日 00:00:00 GMT からのミリ秒数として数値型と相互に変換されます。
※6 大文字小文字の区別なしで"true"とマッチする場合True、それ以外はFalse
※7 Binaryからの変換は一度システムのエンコーディングでString化された後に適用されます(プラットフォーム依存性に注意してください)。
※8 フローサービス標準の日付フォーマット(yyyy-MM-dd'T'HH:mm:ss'.'sss z)
※9 十進表記のみ有効(前後の空白は無視されます)
※10 DateTime型の書式を参照
※11 値の小数点は0に近い方に丸められて失われます。
データ型に関わらずnullはすべての型に変換が可能です。 Mapperコンポーネントでフィールドに入力する際に変換に失敗した場合はエラーが発生します。DateTime型の書式
フローサービス標準の日付書式はISO8601で規定されている「yyyy-MM-dd'T'HH:mm:ss'.'SSS z」形式です。日付型を文字列として書き出す場合はこの形式が使用されます。zはタイムゾーンを表し、’JST’、’+0900’、’GMT-01:00’などのように表記します。タイムゾーンが省略されるとローカルタイムとして処理されます。
また、以下の形式の日付文字列も読み込むことができます。プロパティなどにDateTime値を文字列として設定する場合は下記の形式のいずれかを使用してください。
yyyy-MM-dd'T'HH:mm:ss z yyyy-MM-dd'T'HH:mm:ss'.'SSS z
また、「yyyyMMdd'T'HHmmss'.'SSS」形式のときに限り、UTC指定子「Z」が直後に付加されている場合はGMTとして取り扱います。
大容量ストリーム
大容量ストリームは、フロー上を流れるデータを一時的にファイルに保存することで、普通のストリームよりもメモリ使用量を大幅に削減することができるストリームです。特に、RDB処理で大量のレコードを処理する場合などに効果を発揮します。
大容量ストリームをサポートするストリーム型は、Record, CSV, FixedLength, Text, Binaryの5種類のストリームです。
大容量ストリームを使用するには、フローの開始コンポーネントで「大容量ストリームを使用する」プロパティを「はい」にします。初期値は「はい」となっておりますので、プロパティの値を変更しない限り大容量ストリームが使用されます。大容量ストリームの指定はそのフローでのみ有効です。
注意
大容量ストリームを使用するとストリームのメモリ使用量は低減されますが、コンポーネントの処理で内部的にメモリを使用する場合は、コンポーネント処理でメモリを大量に使用してエラーが発生することがあります。