メイン コンテンツをスキップする 補完的コンテンツへスキップ

ストリーミングの実行

ストリーミングの実行によって、無数のデータを処理できるようになります。ストリーミングを実行しない場合、変換が実行される前に変換の入力全体がメモリに格納されます。そのため、送信されるデータの量が利用可能なメモリに収まる量に制限されます。500MB以上の入力ファイルに対してストリーミング実行を無効にすると、エラーが発生します。

このドキュメンテーションは、tHMapコンポーネントとcMapコンポーネントにのみ適用されます。Spark Batchコンポーネント(tHMapFileやtHMapInputなど)の場合は、ストリーミング実行を有効にする必要はありません。

コンポーネントの設定

  • 大型のファイルを処理するtFileInputRawのようなコンポーネントでは、[Basic settings] (基本設定)ビューで[Stream the file] (ファイルをストリーム)パラメーターを選択する必要があります。これにより、入力ファイル全体をメモリにあるStringやバイト配列に読み込む必要がなくなります:
    tFileInputRawの[Basic settings] (基本設定)ビュー。
  • tHMapの場合は、常にtFileOutputRawを併用する必要があります。tHMapを使用する場合は、[Basic settings] (基本設定)ビューで[InputStream (single column)] (InputStream (単一カラム))パラメーターを選択する必要があります。これによって出力全体をメモリに保存する必要がなくなり、tHMapによってすべての出力が生成されるのを待つことなく、tFileOutputRawが書き込みを開始するようになります:
    tHMapの[Basic settings] (基本設定)ビュー。

ストリーミング実行の仕組み

tHMapのストリーミングは、入力データのブロックを集積し、各ブロックを個別に変換を実行することで動作します。

SimpleLoopファンクションで[Stream Input] (入力をストリーム)プロパティをチェックし、変換がストリームするよう指定します:
[Expression SimpleLoop Properties] (式のSimpleLoopのプロパティ)ダイアログボックス。
そうすることで、1000番目のルーピングエレメントごとに、または各ブロックで変換(xQueryとDSQLのいずれか)が実行されます。ブロックカウントはデフォルトで1000です。この動作は、transform_streaming_block_countというコンテキスト変数を使い、正の数値を追加すれば変更できます:
ジョブの[Context] (コンテキスト)ビュー。

制限事項

また、[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)

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。