パイプラインの巻き戻しと再生
ベータ版
この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
不適切な変換、不正な形式のソースレコードのバッチ、または予期しないスキーマ変更により、既知の時点以降、パイプラインのテーブルが誤った状態になる可能性があります。巻き戻しを行うと、問題が発生する前の時点にパイプラインが戻るため、修正をデプロイして影響を受けたデータのみを再処理することができます。
巻き戻し(Rewind)はテーブルのバージョン、ストリーミングソースのオフセット、およびオペレーターの状態を一緒に復元するため、リプレイによってレコードがスキップされたり重複が書き込まれたりすることがありません。3つの操作でデータを再処理し、それぞれ異なる問題を解決します:
- Rewind は、不適切な変換、不正な形式の入力、不良コードのデプロイなどにより、既知の時点から誤ったデータを書き込んだ リカバリ可能な パイプラインを対象としています。問題が発生する前の時点にテーブルのデータ、ソースオフセット、オペレーターの状態を復元し、オペレーターの状態を維持しながら、影響を受けたデータのみを再処理します。その時点より前のデータは変更されません。
- フル更新は、利用可能なすべてのソースデータからテーブルを再構築し、現在のコンテンツを破棄します。すべてを最初から再計算する場合や、コードの変更が既存の状態と互換性がない場合に使用します。
- Checkpoint reset recovers a パイプライン whose checkpoint is invalid or corrupted, or that is blocked by a checkpoint-incompatible code change.It resets the checkpoint and continues forward while preserving the table's current contents.Rewind cannot recover these cases, because it does not relax Structured Streaming compatibility rules.
要件
Requirement | 詳細 |
|---|---|
チャンネル | パイプラインは Preview チャンネルを使用する必要があります。パイプラインの構成を参照してください。 |
構成 |
|
パイプラインモード | Trigger および連続パイプライン。リアルタイム モードはサポートされていません。 |
ソース | Delta テーブル、ストリーミングテーブル、Kafka、および Auto Loader。 |
ターゲット | ストリーミングテーブルとマテリアライズドビュー。 |
フロー | SCD Type 1およびSCD Type 2のターゲットを含む、ストリーミングフローおよびAUTOチェンジデータキャプチャ(CDC)フロー。集計、結合、重複排除などのステートフルクエリーがサポートされています。 |
パイプライン内のすべてのフローは、これらの要件を満たしている必要があります。pipelines.rewind.betaEnabled が true である間は、条件を満たさないフローを含むパイプラインの更新は失敗します。有効にする前に、すべてのフローが上記の要件を満たしていることを確認してください。
pipelines.rewind.betaEnabled が true に設定されているパイプラインは、現在のチャンネルがリワインドをサポートするランタイムに更新されるまで、現在のチャンネルに戻すことはできません。
復元とリプレイの仕組み
復元とリプレイは別々のステップです。
Rewind は、各テーブルを 復元ポイント 時点のバージョンに戻し、各フローの読み取り進捗を追跡するストリーミングチェックポイントをResetします。変換は実行されず、ソースデータは再処理されません。
リプレイ は、次回のパイプラインの実行時に発生します。現在のパイプライン定義を使用して復元ポイントから再処理を行い、現在に追いついてから、通常のインクリメンタル処理を再開します。復元ではパイプラインは起動しないため、準備ができたらご自身で起動してください。
パイプラインは約1時間に1回、自動的にリワインドポイントを生成し、7日間保持します。作成したばかりのパイプラインは、最初のチェックポイントが生成されるまで、リワインドできるポイントがありません。
データセットを巻き戻すと、同じパイプライン内のその下流にあるすべてのものも巻き戻されます。巻き戻しは1つのパイプラインを対象とします。他のパイプラインや、同じテーブルの外部リーダーとは連携しないため、それらは個別に管理してください。
UI を使用してパイプラインを復元する
UI と Genie は、rewind を使用するための主要な手段です。UI には利用可能な復元ポイントが一覧表示され、commit する前にそれぞれがどのデータセットに影響を与えるかが示されます。
- パイプラインのページで、
パイプラインをラン の横にある ボタンをクリックし、 パイプラインを巻き戻す をクリックします。
- 復元ポイントを選択するか、 「昨日の時点に復元」 や 「最新のポイントに復元」 などのショートカットを使用します。 「次へ」 をクリックします。
- Select which tables to include.パイプライン グラフでデータセットを選択するには グラフ ビューを使用し、テーブルから選択するには リスト ビューを使用します。ソースのオフセットとオペレーターの状態をテーブルデータとともに復元するには、 [すべてのチェックポイントをReset] を選択したまま (default) にし、パイプラインが復元ポイントから再処理するようにします。再処理を行わずにテーブルデータのみを復元するには、これをクリアします (たとえば、テーブルの内容を復元したいが、影響を受けるデータを再処理したくない場合など)。この設定は、テーブルとその上流で同じである必要があり、KafkaやAuto Loaderなどの外部ソースを読み取るフローに対してクリアすることはできません。 次へ をクリックします。
- 復元ポイント、チェックポイントの設定、および影響を受けるデータセットを確認し、 Rewind をクリックします。
データの再生を行うには、パイプラインを起動します。
何度も巻き戻しを実行できます。巻き戻すたびに前の状態が上書きされるため、別の場所に巻き戻すことで失敗したリプレイから復旧できます。
復元後
リプレイが失敗すると、パイプラインは復元された状態で停止します。コードまたはソースデータを修正し、パイプラインを起動して再試行するか、別のポイントに復元します。パイプラインは自動的にはロールバックせず、エラーは標準的なパイプライン診断およびイベントLogsを通じて表面化します。
リプレイは、現在のパイプライン定義が復元された状態と互換性がある場合にのみ成功します。巻き戻しでは、Structured Streaming の互換性ルールは緩和されません。どの変更が互換性を持つかについては、Structured Streaming クエリーの変更の種類を参照してください。マテリアライズドビューはバッチセマンティクスに従い、より幅広いスキーマの変更を許容しますが、依存関係に互換性がない場合は引き続き失敗します。
途中で失敗したリワインドは、パイプラインが部分的にリワインドされた状態のままになる可能性があります。次の2つのオプションがあります。
- 同じポイントまたは別のポイントに再度巻き戻すと、パイプラインはそのポイントに収束します。
- 不完全な復元にもかかわらずパイプラインに通常の更新を強制的に起動させるには、
pipelines.allowUpdateAfterIncompleteRewindをtrueに設定してパイプラインを再起動します。
どこまで復元できるか
復元ポイントは 7 日間保持されます。eng-rewind-teameng-rewind-team
VACUUMまたは、テーブルに対して短いdelta.deletedFileRetentionDurationを実行します。テーブル履歴の操作を参照してください。- 1日間保持するKafkaトピックなど、さかのぼるために必要なウィンドウよりも短いソース保持期間。
複数のソースまたは長い依存関係チェーンを持つパイプラインでは、すべてのテーブルとチェックポイントが一貫した時点まで遡る必要があるため、より長い保持期間が必要です。
Limitations
- フル更新前の時点にはパイプラインを復元できません。
- 復元ポイントは7日間保持されます。復元先に到達するために必要なテーブル履歴またはソースデータが、
VACUUMやソースの短い保持期間などによってすでに削除されている場合、復元は失敗します。復元できる範囲については、こちらをご覧ください。 - リアルタイム モードはサポートされていません。
- Kinesis、Pulsar、Google Pub/Sub、および DSv2 または Python のデータソース API を使用して構築されたカスタムソースは、ソースとしてサポートされていません。
- External sinks and custom sinks are not supported, including sinks defined with
create_sink().「パイプラインでのシンクの使用」を参照してください。 - 行フィルターまたは列マスクを使用するストリーミングテーブルは巻き戻すことができません。行フィルターと列マスクの手動適用を参照してください。
- ステートフル巻き戻しには RocksDB 状態ストアが必要です。これは、パイプラインで default で使用されます。異なる状態ストアで構成されたフローの場合、巻き戻しは失敗します。
- 一部の AUTO CDC ストリーミングテーブルは、巻き戻す前に更新が必要です。パイプラインの巻き戻しをリクエストすると、通知が届きます。
- 巻き戻し後、マテリアライズドビューはインクリメンタル更新ではなく完全に再計算される場合があります。マテリアライズドビューの増分更新を参照してください。
- 巻き戻し(Rewind)は1つのパイプラインを対象としており、外部リーダーや同じテーブルを読み取る他のパイプラインとは連携しません。
- Rewind は、パイプラインのコード、パイプラインの構成、およびタグや権限などの Unity Catalog のオブジェクトメタデータを復元しません。