Lakeflowパイプライン間のデータセットを整理する

Lakeflowパイプラインを使って、1つのパイプラインで1つから数百ものデータセットを処理できます。 ドメイン、ケイデンス、依存関係に基づいて、どのデータセットを一緒に扱うかを決め、所有権、レイテンシ、スケールが異なる場合は別々のパイプラインに分割します。

Overview

チュートリアルでは決して出てこない決定が、実際のデプロイで重要になります。つまり、どのテーブルが同じパイプラインに属し、いつ別のパイプラインにすべきか? これを間違えることは、チームが自らを追い詰める最も一般的な方法の一つです。 典型的な失敗パターンは、すべてを1つの巨大なパイプラインに押し込み、その結果、後になってスケーリング、並行処理、影響範囲の問題に突き当たり、それを後から解消するのに苦労することです。

正解は一つではありませんが、両方向に引っ張る明確な力があり、設計前に知っておくべき一つの厳しい制約があります。

ガイドライン

データセットをドメイン、共有のケイデンス、依存関係でグループ化し、所有権、レイヤー、レイテンシの境界で分割します。 単一パイプラインの独立して更新可能なデータセットの数を並列更新の上限以下に保ちましょう。

設計前に並行制限を知っておくこと

単一のトリガーされたパイプライン更新は最大 16のデータセット更新を並行して実行します。 これは、すべてを一つのパイプラインにまとめるチームにとって最もよくある驚きです。約16個以上のデータセットが同時に実行できると、余ったものは並列に動かず最初の16個の後ろにキューイングされるため、計算が可能でも更新時間が長く伸びてしまうのです。 もし数十の独立したデータセットがあり、更新時間が気になるなら、それだけでもすべてを一つのパイプラインに詰め込むべきではありません。

同じパイプラインに属するもの

構造やスケジュールが共通するデータセットはまとめておきます:

  • 1つの依存チェーンや1つの論理ドメインを形成するデータセット、例えば注文用のブロンズ、シルバー、ゴールドテーブルなどです。 連結された有向非巡回グラフ(DAG)をまとめておくことで、パイプラインはそれをスケジュール化し、チェックポイントを行い、一貫した単位として完全に更新し、系譜の読みやすさを保ちます。 「Lakeflow パイプライン フローを使用してデータを増分的に読み込んで処理する」を参照してください。
  • 同じ鮮度要件と実行頻度を共有し、同じトリガーで、同じトランザクション境界内で、一緒に更新されるべきデータセット。
  • グラフ全体が並列更新の上限を十分に下回り、許容可能な時間で更新できるほど小さいデータセット。

別パイプラインに属するもの

所有権、レイヤー、レイテンシーが異なる場合は、データセットを分割する:

  • 異なる領域やチーム。 別々の所有権は通常、別々のパイプラインを意味し、あるチームの変化や失敗が別のチームの妨げになることはありません。
  • レイヤーはそれぞれ独立してスケールやスケジューリングしたいものです。 広く推奨されている分割は、インジェス(ブロンズ)とトランスフォーミング(シルバーとゴールド)を別々のパイプラインに分けることです。これにより、インジェスが遅い、または失敗してもトランスフォーミングが遅れず、それぞれが自分のニーズに合わせて計算できます。
  • 異なるレイテンシプロファイル。 継続的な低遅延のストリームは、1 日 1 回のバッチ集計とパイプラインを共有すべきではありません。 トリガーされたパイプライン モードと継続的パイプライン モードを参照してください。
  • 並列更新の制限を超えるデータセット、それ以外の場合はキューに追加されます。

データセットを単独で実行するには、スタンドアロンのパイプラインを検討します。 単独パイプラインと Lakeflow パイプラインの比較を参照してください。

実用的な目安

一つのモノリシックなパイプラインにデフォルトで決めたり、すべてのテーブルを個別のパイプラインに分割したりもしないでください。 ドメイン別+ 共有ケイデンス+依存関係でグループ化し、 所有権、レイヤー、レイテンシ の境界で分割し、単一パイプラインの独立して更新可能なデータセット数を並列更新の上限以下に快適に保つことができます。 迷ったときは、1つの巨大なパイプラインよりもドメインにアライメントされた中規模パイプラインをいくつか用意しましょう。 すでに稼働中のモノリスを分割するよりも、後で2つの小さなパイプラインを統合する方がはるかに簡単です。

制限事項

  • 単一のトリガー更新は最大16のデータセット更新を並行して実行します。 その上限を超えたデータセットは同時に実行されるのではなくキューに入るため、数十個の独立したデータセットを含むパイプラインでは、コンピューティング リソースを利用できる場合でも、更新に時間がかかることがあります。
  • 複数のパイプラインに分割すると、エンドツーエンドの可視性が失われます。 分割するときは、システムテーブル(system.lakeflow.pipelinessystem.lakeflow.job_run_timeline)に寄りかかり、Lakeflow Jobでパーツをオーケストレーションして全体の流れを端から端まで一つに表示できます。 ワークフローでのパイプラインの実行に関する記事を参照してください。

その他のリソース