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

パイプラインの種類

Foundry では主に3種類のパイプラインを作成できます。それぞれ、次の基準に応じて異なるトレードオフがあります。

  • 遅延。パイプラインの実行が開始してから完了するまで、どのくらいの時間がかかりますか?
  • 複雑さ。パイプラインの開発と継続的な保守はどのくらい難しいですか?
  • 計算コスト。パイプラインには、実際にどのくらいの計算時間のコストがかかりますか?
  • データ規模の変化への耐性。時間の経過とともに、どのくらいの追加データがパイプラインに流れ込みますか?

パイプラインには次の3種類があります。

  • バッチパイプラインは、実行のたびに、変更があったデータセットをすべて再計算します。
  • インクリメンタル(差分処理) パイプラインは、前回の実行以降に変更があった新しいデータだけを処理します。
  • ストリーミングパイプラインは継続的に実行され、新しいデータがプラットフォームに到着すると処理します。

以下では、各種類のパイプライン、そのトレードオフ、およびその種類のパイプラインの開発をはじめる方法について説明します。参照しやすいように、前述のトレードオフに基づいてパイプラインの種類をまとめたテーブルを示します。

基準バッチインクリメンタルストリーミング
遅延高い低い非常に低い
複雑さ低い中程度高い
計算コスト中程度低い高い
データ規模の変化への耐性低い高い高い

Foundry は、バッチパイプラインとインクリメンタルパイプラインの高速バージョンも提供しています。これらはパフォーマンスを向上させられますが、標準のパイプラインで利用可能な式やデータ加工の一部をサポートしていません。

バッチ

バッチパイプラインでは、上流のデータが変更されるたびに、パイプライン内のすべてのデータセットが完全に再計算されます。すべてが再計算されるため、パイプライン全体のパフォーマンスは長期にわたって非常に安定しており、コードや保守の複雑さも控え目に抑えられます。より多くのユーザーがバッチパイプラインの開発に参加できるよう、SQL を含む幅広い言語やツールが利用可能です。

前述の基準に基づいてバッチパイプラインを検討すると、次のようになります。

  • バッチパイプラインの遅延は非常に高くなる場合があります。前回の同期以降に変更されていなくても、データがプラットフォームに到着するたびにすべてのデータを処理する必要があるためです。ただし、全体のデータ規模が小さい場合は、遅延が低くなることもあります。
  • バッチパイプラインの複雑さは非常に低いです。通常、フィルター、結合、集計などのテーブル操作の概念を理解する必要はありますが、それ以上の知識はほとんど必要ありません。
  • バッチパイプラインの計算コストは高くなる場合があります。パイプラインをビルドするたびに、大量の計算が繰り返されるためです。ただし、この要素も、全体のデータ規模が小さい場合は無視できます。
  • データ規模の変化への耐性は低いです。入力データセットが大量のイベントを表す場合など、大量の新しいデータがパイプラインに流れ込むと、バッチパイプラインのコストが管理できないほど高くなり、実行にも時間がかかりすぎるようになります。

ほとんどの場合、Foundry でのパイプライン開発はバッチパイプラインの作成からはじめ、パイプラインのユースケースが検証されるにつれて、インクリメンタル計算に対応するよう拡張することを推奨します。多くの場合、特にデータ規模が小さい場合(たとえば、数千万行未満)、バッチパイプラインをそのまま使い続けられます。

将来的にパイプラインをインクリメンタルにする必要があると予想される場合は、バッチパイプラインの開発に Python または Java を使用することを推奨します。これらの言語はインクリメンタル計算をサポートしているためです。

Pipeline Builder でバッチパイプラインを作成する方法を学ぶか、ほかの言語のチュートリアルに沿って進めることで、開発をはじめられます。

高速

Pipeline Builder は現在、高速パイプラインをサポートしており、特定の条件下で実行を高速化できます。高速パイプラインは、Rust ↗ で記述されたオープンソースのクエリエンジンである DataFusion ↗ を基盤とするバックエンドを使用します。従来の Spark ベースのパイプラインと比較して、高速パイプラインは小規模から中規模のデータセットの計算処理を大幅に高速化できます。

高速パイプラインは、以前は軽量パイプラインと呼ばれていました。「軽量」という用語は、扱うデータのサイズではなく、これらのパイプラインの実行に必要な時間と計算リソースが少ないことを意味していました。名称の変更は、大規模なデータセットであっても、高速パイプラインが実行時間と計算リソースの使用量の両方を削減することを反映しています。

高速パイプラインを最初から作成することも、既存のバッチパイプラインやインクリメンタルパイプラインを高速パイプラインに変換することもできます。Pipeline Builder の高速パイプラインの詳しくはこちら

インクリメンタル

インクリメンタルパイプラインでは、前回のビルド以降に変更されたデータの行またはファイルだけが計算されます。これは、イベントデータや、時間の経過とともに大量のデータが変化するほかのデータセットの処理に適しています。全体の計算量を削減するだけでなく、バッチパイプラインと比較して、パイプライン全体の遅延を大幅に削減できます。インクリメンタル計算で利用可能なのは、Python と Java の API のみです。

前述の基準に基づいてインクリメンタルパイプラインを検討すると、次のようになります。

  • インクリメンタルパイプラインの遅延は、数分程度まで非常に低く抑えられます。これまでの経験では、この低遅延は、大多数の組織の要件を満たすのに十分です。
  • インクリメンタルパイプラインの複雑さは中程度から高い水準です。インクリメンタルパイプラインを記述して保守するには、単にテーブル形式のデータフレームという高レベルの概念に基づいて操作するだけでなく、データが Foundry のデータセットトランザクションにどのように流れ込むか、入力データセットがインクリメンタルではない方法で更新された場合にどう対処するか、そして長期にわたって高いパフォーマンスを維持する方法を理解する必要があります。
  • 大規模なデータセットでは、インクリメンタルパイプラインの計算コストをバッチパイプラインより低く抑えられる場合があります。実際に行われる計算量を最小限に抑えられるためです。
  • データ規模の変化への耐性は高いです。新しいデータだけを処理するため、インクリメンタルパイプラインでは、ほとんどのデータが変化しない大規模なデータセットの計算をやり直す必要がありません。

インクリメンタルパイプラインの詳細については、次のリソースを参照してください。

ストリーミング

ストリーミングパイプラインでは、Foundry にストリーミングされる新しいデータを処理するためにコードが継続的に実行されます。これにより、最も低い遅延を実現できますが、複雑さとコンピューティングコストは最も高くなります。一般に、ストリーミングパイプラインは、コンピューティングジョブの管理よりもマイクロサービスの管理に近いものとして捉えると理解しやすくなります。ストリーミングパイプラインを正常に稼働させるには、稼働時間、回復力、ステートフルな操作について十分に考慮する必要があります。

上記の基準に沿ってストリーミングパイプラインを評価すると、次のようになります。

  • ストリーミングパイプラインの低遅延については、遅延を非常に小さくできます。ユースケースでデータを1分未満で利用可能にすることが強く求められる場合、ストリーミングパイプラインが適している可能性があります。
  • ストリーミングパイプラインの複雑さは非常に高くなります。これらのパイプラインを作成するには、ステートフルな操作など、将来的に予期しない不安定性を引き起こす可能性があるさまざまなパターンを避ける必要があります。また、ストリーミングパイプラインは、バッチパイプラインやインクリメンタル(差分処理)パイプラインよりも障害への耐性が低い傾向があります。常に最新のデータに依存するユースケースでは、ダウンタイムによる中断が、どのようなものであってもサービス停止と見なされる可能性があるためです。
  • ストリーミングパイプラインのコンピューティングコストは非常に高くなる可能性があります。ストリーミングパイプラインの性質上、新しい入力データを処理するためにコンピューティングリソースを常に利用可能な状態にしておく必要があるためです。
  • データ規模の変化に対する回復力は高くなります。ストリーミングパイプラインは高いスループットに対応するように設計されており、通常、バッチパイプラインやインクリメンタルパイプラインよりも大きなデータ規模の変化に対応できます。

ほとんどの場合、ユースケースで非常に低い遅延が求められない限り、ストリーミングパイプラインの作成は避けるのが最善です。インクリメンタルパイプラインは、多くの場合、エンドツーエンドの遅延を分単位に抑える性能を実現できます。そのため、ストリーミングパイプラインに伴う複雑さやコンピューティングコストの増加を避けながら、ほとんどのニーズを満たせます。

ストリーミングパイプラインについての詳しくはこちらのリソースを参照してください。

ストリーミングパイプラインに関する追加のドキュメントは、近日中に利用可能になります。ストリーミングパイプラインの構築に関心がある場合は、Palantir の担当者にお問い合わせください。