パイプラインはどのように更新されますか?
パイプラインの更新が実行されると、パイプラインで定義されているマテリアライズドビューとストリーミングテーブルが更新され、その結果がソースデータの現在の状態を反映するようになります。データセットの更新方法は、データセットの種類と更新の種類によって異なります。このページでは、Lakeflow Spark Declarative Pipelines全体で共通する更新の概念について説明します。更新のトリガーと管理方法については、 「パイプライン更新の実行」を参照してください。
更新タイプ
デフォルトでは、パイプライン内のすべてのマテリアライズドビューとストリーミングテーブルは、更新のたびに更新されます。次の表は、各更新タイプがどのように動作するかをまとめたものです。
アップデートのタイプ | マテリアライズドビュー | ストリーミングテーブル |
|---|---|---|
更新(デフォルト) | 定義クエリの現在の結果を反映するように、結果を更新します。Databricks はコストを評価し、より効率的である場合に増分更新を実行します。 | 新しいレコードをストリーミングテーブルおよびフローに定義されたロジックを通じて処理します。 |
フルリフレッシュ | 定義クエリの現在の結果を反映するために、結果を再計算します。 | ストリーミングテーブルからデータをクリアし、フローからチェックポイントをクリアし、データソースからすべてのレコードを再処理します。 |
ストリーミングフローチェックポイントのリセット | マテリアライズドビューには該当しません。 | フローからチェックポイントをクリアしますが、ストリーミングテーブルからデータはクリアしません。その後、データソースからすべてのレコードを再処理します。 |
更新(デフォルト)
デフォルトの更新は、その定義クエリの現在の結果を反映するようにデータセットを更新します。
ストリーミングテーブルは本質的に増分的です。ストリーミングテーブルの更新では、最後の更新以降に到着したレコードのみが評価され、テーブルの現在の定義を使用して追加されます。古いレコードは再処理されません。そのため、既に書き込まれたデータに影響を与える変更は適用されません。言い換えれば、ストリーミングテーブルのデフォルト更新は、データの正確性を犠牲にして、時間とリソースのコストを削減します。古いデータを再処理するには、フル更新を実行するか、フローチェックポイントをリセットします。
マテリアライズドビューは増分更新を試みますが、テーブルの正確性を完全に維持するため、必要に応じてすべてのレコードを再処理します。マテリアライズドビューは、2つの方法のいずれかを使用して更新されます。
- 増分更新は、前回の更新以降の変更を特定し、新しいデータまたは変更されたデータのみをマージします。
- 完全更新 は、増分更新が不可能な場合、またはコスト効率が良くない場合に、クエリ全体を実行し、既存のデータを置き換えます。
デフォルトでは、Databricks はコストモデルを使用して、より費用対効果の高い方法を選択します。この選択を更新ポリシーでオーバーライドできます。増分更新のセマンティクス、要件、サポートされているSQLについては、「マテリアライズドビューの増分更新」を参照してください。
フルリフレッシュ
フル更新では、データセットを定義するロジックによってソースデータからすべてのレコードが再処理されます:
- マテリアライズドビューでは、フル更新によって結果全体が再計算されます。マテリアライズドビューは、常にバッチクエリと同じ結果を返すため、デフォルトの更新と完全な更新は同一のデータを生成します。
- ストリーミングテーブルでは、フルリフレッシュにより、テーブルが切り捨てられ、そのフローのストリーミングチェックポイントがクリアされ、ソースからのすべてのレコードが再処理されます。
フル更新はすべてのソースデータを再処理するため、時間とコストはそのデータのサイズに比例します。Databricks は、定義またはスキーマの変更が既存のデータと互換性がない場合など、必要な場合にのみ完全更新を実行することを推奨しています。ストリーミングテーブルの完全な更新により、ソースが元のデータを保持しなくなった場合 (例えば、保持期間を過ぎたKafkaトピックなど) は、レコードが削除される可能性があります。
ストリーミングテーブルのフルリフレッシュをいつどのように実行するかについては、ストリーミングテーブルのフルリフレッシュを参照してください。
チェックポイントをリセット
チェックポイントのリセットはストリーミングテーブルにのみ適用されます。選択したフローのストリーミングチェックポイントを、ストリーミングテーブルに既に書き込まれたデータをクリアせずにクリアし、その後、ソースからすべてのレコードをそれらのフローを介して再処理します。完全更新とは異なり、既存のテーブルデータは保持されます。
選択したフローのストリーミングソースを再処理したい場合に、例えばフローのロジックを変更した後でも、テーブルを切り捨てずにこれを使用します。
チェックポイントのリセットは、LakeFlow Spark宣言型パイプライン REST API を介してトリガーされます。手順については、選択したストリーミングフローのチェックポイントをクリアするパイプラインの更新を開始するを参照してください。