ストリーミングの実行
ストリーミングの実行によって、無数のデータを処理できるようになります。ストリーミングを実行しない場合、変換が実行される前に変換の入力全体がメモリに格納されます。そのため、送信されるデータの量が利用可能なメモリに収まる量に制限されます。500MB以上の入力ファイルに対してストリーミング実行を無効にすると、エラーが発生します。
このドキュメンテーションは、tHMapコンポーネントとcMapコンポーネントにのみ適用されます。Spark Batchコンポーネント(tHMapFileやtHMapInputなど)の場合は、ストリーミング実行を有効にする必要はありません。
コンポーネントの設定
- 大型のファイルを処理するtFileInputRawのようなコンポーネントでは、[Basic settings] (基本設定)ビューで[Stream the file] (ファイルをストリーム)パラメーターを選択する必要があります。これにより、入力ファイル全体をメモリにあるStringやバイト配列に読み込む必要がなくなります:
- tHMapの場合は、常にtFileOutputRawを併用する必要があります。tHMapを使用する場合は、[Basic settings] (基本設定)ビューで[InputStream (single column)] (InputStream (単一カラム))パラメーターを選択する必要があります。これによって出力全体をメモリに保存する必要がなくなり、tHMapによってすべての出力が生成されるのを待つことなく、tFileOutputRawが書き込みを開始するようになります:
ストリーミング実行の仕組み
tHMapのストリーミングは、入力データのブロックを集積し、各ブロックを個別に変換を実行することで動作します。
SimpleLoopファンクションで[Stream Input] (入力をストリーム)プロパティをチェックし、変換がストリームするよう指定します:
![[Expression SimpleLoop Properties] (式のSimpleLoopのプロパティ)ダイアログボックス。](/talend/ja-JP/data-mapper-user-guide/8.0-R2025-09/Content/Resources/images/tdm-streaming_tHMap-map.png)
そうすることで、1000番目のルーピングエレメントごとに、または各ブロックで変換(xQueryとDSQLのいずれか)が実行されます。ブロックカウントはデフォルトで1000です。この動作は、transform_streaming_block_countというコンテキスト変数を使い、正の数値を追加すれば変更できます:
![ジョブの[Context] (コンテキスト)ビュー。](/talend/ja-JP/data-mapper-user-guide/8.0-R2025-09/Content/Resources/images/tdm-streaming_block-count.png)
制限事項
また、[Stream Input] (入力をストリーム)プロパティを選択する時は以下の情報が重要となります:
- マップで[Stream Input] (入力をストリーム)プロパティを有効にできるのは、1つのSimpleLoopファンクションのみです。複数のファンクションを有効にした場合、最上位のものだけが考慮され、他は無視されます。
- [Stream Input] (入力をストリーム)プロパティを有効にするルーピングエレメントには、ルーピングする兄弟エレメントがあってはなりません。これは、ルーピングするエレメントの祖先にも適用されます。したがって、複数の出力を持つマップはストリーミングできません。
- SimpleLoopファンクションで[Stream Input] (入力をストリーム)プロパティを選択するとソートキーが使用できません。ソートアクションはストリーミング中には実行できないためです。
- SimpleLoopファンクションで[Stream Input] (入力をストリーム)プロパティを選択し、さらに個別の子エレメントを選択すると、入力が子エレメントによってソート済みとなり、さらにソートすることなく個別の計算を行えるようになります。
root
|-row(0:*) can stream
|-a
|-b(0:*) can stream (if row does not stream)
|-c
|-d(0:*) cannot stream (has sibling loop h)
|-e
|-f(0:*) cannot stream (parent d has sibling loop h)
|-g(0:*) cannot stream (grand parent d has sibling loop h)
|-h(0:0) cannot stream (has sibling loop d)