注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

ストリーミング用 Pipeline Builder パイプラインでの結合

ストリーミング用 Pipeline Builder では、ストリームをバッチデータセットやほかのストリームと結合できます。ストリーミングは低遅延を特徴とするため、結合の実装方法は標準のバッチパイプラインとは異なります。このページでは、結合の仕組みと、パイプラインで結合を効果的に活用する方法を説明します。

ストリームをバッチデータセットと結合する

Foundry では、バッチ用 Pipeline Builder パイプラインで2個のバッチデータセットを結合する場合と同様の方法で、低遅延のストリームをバッチデータセットと組み合わせることができます。

Pipeline Builder でストリームをバッチデータセットと結合するには、次の手順を実行します。

  1. ストリームとバッチデータセットを Pipeline Builder のグラフに追加します。

  2. バッチデータセットの下にあるドロップダウンメニューを選択し、種類をスナップショットに変更します。

    ストリームの種類を選択する画面。
  3. 結合するストリームを選択します。

  4. 結合を選択し、結合の右側にバッチデータセットを選択します。

  5. 結合の種類で、左参照結合を選択します。

  6. 一致条件を入力します。

アーキテクチャ

ストリーミングでバッチデータセットと結合する際は、最初にバッチデータセットをダウンロードし、ストリーミングクラスター内でインデックス化することで、低遅延の参照を可能にします。結合を低遅延で実行するため、同じ Pipeline Builder パイプライン内では、ストリームと結合する前にバッチデータセットを加工することはできません。

バッチデータセットは、新しいトランザクションがデータセットに書き込まれると更新されます。バッチデータセットに新しいトランザクションが追加されると、バックグラウンドプロセスがデータの新しいビューをダウンロードし、クエリ可能な形式に変換します。この処理が完了すると、ストリームはバッチデータセットの新しいビューとの結合を開始します。

制限事項

ストリームと結合する前にバッチデータセットを加工することはできません。バッチデータセットを加工する必要がある場合は、上流の Pipeline Builder パイプラインで実行できます。

ストリーミングの結合には、次の制限事項があります。

  • バッチデータセットと結合する場合、結合の左側はストリーム、または読み取りモードが「ストリーム」のバッチデータセットである必要があります。

  • ストリーミングの結合に使用するバッチ(スナップショット)データセットには、APPEND トランザクションのみを使用する必要があります。スナップショットデータセットに上書きや削除などの APPEND 以外のトランザクションが含まれている場合、結合の出力が空になることがあります。この問題が発生した場合は、APPEND トランザクションのみを使用してスナップショットデータセットを再作成してください。

  • 8~10 GB を超えるデータを含むバッチデータセットと結合すると、パフォーマンスが低下する場合があります。

  • 新しい APPEND トランザクションが検出された場合、バッチデータセットは最大でも5分に1回しか更新されません。

  • 大規模な静的データセットと結合すると、クラスターの起動に時間がかかる場合があります。

ストリームをほかのストリームと結合する

Foundry では、バッチ用 Pipeline Builder パイプラインで複数のバッチデータセットを結合する場合と同様に、複数の低遅延ストリームを組み合わせることができます。

Pipeline Builder で2個のストリームを結合するには、次の手順を実行します。

  1. 2個のストリームを Pipeline Builder のグラフに追加します。
  2. 結合を選択し、2個のストリームを選択します。
  3. 結合の種類で、外部キャッシュ結合を選択します。
  4. 一致条件を入力します。
  5. キャッシュ時間の値と単位を指定します。キャッシュ時間の値と単位によって、2個のストリームの結合に使用するキャッシュにデータを保存する期間が決まります。

外部結合ではなく左結合または右結合を行う場合は、結合の下流で null 値を持つレコードを除外できます。左結合の場合は左側の値が null のレコードを除外し、右結合の場合は右側の値が null のレコードを除外します。

アーキテクチャ

ストリームは無期限に実行され、新しいレコードが結合の両側に絶えず流れ込むため、2個のストリーム間の結合は、ストリーム全体ではなく、結合の両側のデータを格納したキャッシュに対して実行されます。

複数のストリーム間の結合は、状態が無制限に増大するのを防ぐため、データのキャッシュに対してのみ実行されます。状態が無制限に増大すると、ストリーミングクラスターは最終的にメモリー不足になり、クラッシュします。結合の左側と右側のキャッシュに有効期限を設定することで、結合用のレコードを保存するために必要な状態のサイズが制限され、ストリーミングクラスターのメモリー不足を防ぎます。

データはキーごとに保存され、タスクマネージャー間に分散されるため、より大規模な結合を実行できます。そのため、より大規模なストリームと結合するには、タスクマネージャーごとのメモリーを増やすか、クラスターで実行するタスクマネージャーの数を増やすことができます。

左側のストリームのレコードは、結合で指定したキー列に基づいて、常に右側の最新のレコードと結合されます。特定のキーについて結合されるのは、最新のレコードのみです。

制限事項

ストリームをほかのストリームと結合する場合は、次の制限事項があります。

  • 状態が無制限に増大するのを防ぐため、結合の左側と右側の両方にキャッシュの有効期限を設定する必要があります。
  • 結合の両側で、結合キーごとに最新の値のみが保存されます。そのため、この結合は「外部」結合のように動作します。
  • 結合の反対側に一致するレコードがまだない状態で、左側または右側のストリームにレコードが到着すると、反対側の値が null のレコードが発行されます。