Important
この機能は ベータ版です。 有効にするには、パイプラインを プレビュー チャンネルに設定し、 pipelines.rewind.betaEnabled パイプラインの設定を trueに設定してください。
要件を参照してください。
変換の不備、ソースレコードの誤った一括、予期せぬスキーマの変更などは、既知の時点以降のパイプラインのテーブルが誤りとなることがあります。 Rewindは問題発生前のポイントに戻し、修正をデプロイし、影響を受けたデータのみを再処理できるようにします。
巻き戻しはテーブルバージョン、ストリーミングソースオフセット、オペレーターの状態をまとめて復元するため、リプレイがレコードをスキップしたり重複を書き込んだりしません。 3つのオペレーションはデータを再処理し、それぞれ異なる問題を解決します。
- 巻き戻 しは、誤った変換、誤った入力、または誤ったコード展開の後など、既知の時点で誤ったデータを書き込んだ 復元可能な パイプラインのためのものです。 テーブルデータ、ソースオフセット、オペレーターの状態を問題発生前の時点で復元し、影響を受けたデータのみを再処理し、オペレーターの状態を維持します。 その点以前のデータは手つかずです。
- フルリフレッシュ は利用可能なすべてのソースデータからテーブルを再構築し、現在の内容を破棄します。 すべてを一から再計算したり、コード変更が既存の状態と互換性がないときに使うことができます。
- チェックポイントリセット は、チェックポイントが無効または破損している、またはチェックポイント互換コード変更によってブロックされているパイプラインを回復します。 チェックポイントをリセットし、テーブルの現在の内容を保持したまま前進を続けます。 Rewindはこれらのケースを復元できません。なぜなら、構造化ストリーミングの互換性ルールを緩和していないからです。
Requirements
| Requirement | Detail |
|---|---|
| Channel | パイプラインは プレビュー チャンネルにある必要があります。 「パイプラインの構成」を参照してください。 |
| コンフィギュレーション |
pipelines.rewind.betaEnabledパイプラインの設定をtrueに設定し、パイプラインを一度実行します。 各フローはタイムトラベルを有効にしたアップデートを完了して初めて巻き戻し可能になります。 |
| パイプライン モード | トリガー付きおよび連続パイプライン。 リアルタイムモードはサポートされていません。 |
| Sources | デルタテーブル、ストリーミングテーブル、Kafka、オートローダーなどです。 |
| ターゲット | ストリーミングテーブルと具体化されたビュー。 |
| Flows | ストリーミングフローおよびAUTOは、SCDタイプ1およびSCDタイプ2ターゲットを含むデータキャプチャ(CDC)フローを変更します。 アグリゲーション、結合、重複除去などのステートフルクエリもサポートされています。 |
パイプライン内のすべての流れはこれらの要件を満たす必要があります。
pipelines.rewind.betaEnabledがtrueされている間、条件を満たしていないフローを含むパイプラインは更新に失敗します。 すべてのフローが上記の要件を満たしていることを確認してから有効にしてください。
注
pipelines.rewind.betaEnabledがtrueに設定されたパイプラインは、リワインドをサポートするランタイムに更新されるまで現在のチャネルに戻ることはできません。
巻き戻しと再生の仕組み
巻き戻しと再生は別々のステップです。
巻き戻しは、各テーブルを巻き戻しポイント時点で保持していたバージョンに復元し、各フローがどこまで読み取ったかを追跡するストリーミングチェックポイントをリセットします。 変換は実行されず、ソースデータも再処理されません。
パイプラインが稼働する次の時にリプレイが行われます。 現在のパイプライン定義を使って巻き戻しポイントから再処理し、現在まで追いついてから通常のインクリメンタル処理を再開します。 巻き戻しはパイプラインを始めませんので、準備ができたら自分で始めてください。
パイプラインは約1時間に1回自動的にリワインドポイントを生成し、7日間保持します。 作成したばかりのパイプラインは、最初の結果が生成されるまで、巻き戻す対象がありません。
データセットを巻き戻すことは、同じパイプライン内の下流のすべても巻き戻します。 リワインドは1つのパイプラインをカバーします。 他のパイプラインや同じテーブルの外部リーダーとは連携しないため、それらは別々に管理してください。
UIを使ってパイプラインを巻き戻す
UIとジーニーが巻き戻しの主な使い方です。 UIは利用可能な巻き戻しポイントを一覧にし、コミットする前にそれぞれがどのデータセットに影響を与えるかを示します。
- パイプラインページで、「パイプラインを実行する」横の
をクリックし、「パイプラインを巻き戻す」をクリックしてください。
- 巻き戻しポイントを選択するか、「 昨日に巻き戻 す」や 「最新の時点に巻き戻す」などのショートカットを使うことができます。 次へをクリックします。
- どのテーブルを含めるか選びましょう。 パイプライングラフ内のデータセットを選択するには グラフ ビュー、テーブルから選択する場合は リスト ビューを使います。 すべての チェックポイントをリセット したまま(デフォルト)を残して、ソースオフセットとオペレータの状態、テーブルデータを復元し、パイプラインがリワインドポイントから再処理できるようにします。 テーブルデータの復元のみをクリアし、再処理は不要です。例えば、テーブルの内容を復元したいけれど影響を受けたデータの再処理はしたくない場合などです。 この設定はテーブルとその上流にも同じでなければならず、KafkaやAuto Loaderのような外部ソースを読み取るフローではクリアできません。 次へをクリックします。
- 巻き戻しポイント、チェックポイント設定、影響を受けたデータセットを確認し、巻き戻しをクリックします。
データを再生するためにパイプラインを起動してください。
何度も巻き戻すことができます。 各巻き戻しは前のリプレイを置き換えるため、失敗したリプレイからは別の場所で巻き戻すことが可能です。
巻き戻しの後
リプレイ失敗によりパイプラインは巻き戻されたまま止まっています。 コードやソースデータを修正してパイプラインを再起動し、別の地点に巻き戻すこともできます。 パイプラインは自動的にロールバックせず、標準的なパイプライン診断やイベントログを通じてエラーが発生します。
リプレイは、現在のパイプライン定義が復元状態と互換性がある場合のみ成功します。巻き戻しは構造化ストリーミングの互換性ルールを緩和しません。 互換性のある変更については 、「構造化ストリーミングクエリの変更の種類」を参照してください。 マテリアライズドビューはバッチセマンティクスに従い、より広範なスキーマの変更を許容しますが、依存関係が互換性がないと失敗します。
途中でリワインドが失敗すると、パイプラインが部分的に巻き戻されることがあります。 次の 2 つのオプションがあります。
- 同じ地点か別の地点に巻き戻すと、パイプラインはその地点に収束します。
- 不完全な巻き戻しにもかかわらずパイプラインを通常の更新を強制的に開始させるには、
pipelines.allowUpdateAfterIncompleteRewindをtrueに設定してパイプラインを再起動します。
どこまで巻き戻せるか
巻き戻しポイントは7日間保持されます。 そのウィンドウ内で、必要なデータがすでに削除されている場合、巻き戻しは失敗します。 リワインドに頼る前にこれらを確認してください:
- テーブル上の
VACUUMまたは 短いdelta.deletedFileRetentionDuration。 テーブル履歴の操作を参照してください。 - 保持期間が 1 日の Kafka トピックのように、巻き戻したい期間よりもソースの保持期間が短いこと。
複数のソースや長い依存チェーンを持つパイプラインは、すべてのテーブルやチェックポイントが一貫したポイントに戻る必要があるため、より多くの保持が必要です。
制限事項
- リワインドはパイプラインを完全リフレッシュ前のポイントまで復元することはできません。
- 巻き戻しポイントは7日間保持され、
VACUUMやショートソース保持などで、テーブル履歴やソースデータがすでに削除されている場合は失敗します。 どれだけ遡れるか見てみましょう。 - リアルタイムモードはサポートされていません。
- Kinesis、Pulsar、Google Pub/Sub、およびDSv2やPythonのデータソースAPIで作成されたカスタムソースはソースとしてサポートされていません。
- 外部シンクやカスタムシンクはサポートされていません。
create_sink()で定義されたシンクも含まれます。 「パイプラインでシンクを使用する」を参照してください。 - 行フィルターやカラムマスクを使用するストリーミングテーブルは巻き戻しできません。 「行フィルターと列マスクを手動で適用する」を参照してください。
- ステートフルリワインドにはRocksDBの状態ストアが必要で、パイプラインはデフォルトでこれを使います。 異なる状態ストアで設定されたフローでは巻き戻しが失敗します。
- 一部のAUTO CDCストリーミングテーブルは巻き戻し前にリフレッシュが必要です。 パイプラインは巻き戻しをリクエストすると通知してくれます。
- マテリアル化されたビューは、巻き戻し後に段階的にリフレッシュされるのではなく、完全に再計算される可能性があります。 「具体化されたビューの増分更新」をご覧ください。
- リワインドは1つのパイプラインをカバーし、外部リーダーや同じテーブルを読む他のパイプラインとは連携しません。
- Rewindはパイプラインコード、パイプライン設定、タグや付与などのUnity Catalogオブジェクトメタデータを復元しません。