Important
這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。
錯誤的轉換、來源記錄批次錯誤,或意外的結構變更,都可能讓管線的資料表從已知時間點開始出現錯誤。 Rewind 會將管線回傳到問題發生前的某個點,這樣你就可以部署修正並只重新處理受影響的資料。
Rewind 會同時還原資料表版本、串流來源偏移量和運算子狀態,因此重播時不會跳過記錄或寫入重複記錄。 三個操作會重新處理資料,並解決不同的問題:
- 倒轉 適用於可復原的管線:這類管線從某個已知時間點開始寫入錯誤資料,例如在錯誤的轉換、格式錯誤的輸入,或不良的程式碼部署之後。 它會將資料表資料、來源偏移量和運算子狀態恢復到問題發生前的某點,並只處理受影響的資料,並保留運算子狀態。 該時間點之前的資料未經變動。
- 完整刷新 會從所有可用原始資料重建表格,並丟棄其目前的內容。 用它從頭重新計算所有東西,或當程式碼變更與現有狀態不相容時。
- 檢查點重置 可恢復檢查點無效或損壞,或因檢查點不相容程式碼變更而阻塞的管線。 它會重置檢查點並繼續前進,同時保留資料表目前的內容。 Rewind 無法恢復這些案例,因為它並未放寬結構化串流相容性規則。
要求
| Requirement | Detail |
|---|---|
| Channel | 管線必須位於 預覽 通道。 請參見 「配置管線」。 |
| 組態 | 將 pipelines.rewind.betaEnabled 管線設定為 true,然後執行管線一次。 每個流程只有在完成一次啟用時間旅行的更新後,才會變得可回溯。 |
| 管線模式 | 觸發式與連續式管線。 不支援即時模式。 |
| Sources | Delta 表格、串流表格、Kafka 和 Auto Loader。 |
| 目標 | 串流資料表與實體化視圖。 |
| Flows | 串流流程和 AUTO 變更資料擷取(CDC)流程,包括 SCD 第 1 類和 SCD 第 2 類目標。 支援有狀態查詢,例如聚合、聯結與去重。 |
管線中的每條流程都必須符合這些要求。 當 pipelines.rewind.betaEnabled 是 true時,包含不符合資格的流程的管線會失敗更新。 啟用前,請確認每個流程都符合上述要求。
Note
將 pipelines.rewind.betaEnabled 設定為 true 的管線,在「目前」通道更新為支援回溯的執行階段之前,無法移回「目前」通道。
倒帶與重播的運作方式
倒帶和重播是分開的步驟。
回溯 會將每個資料表還原至 回溯點 時的版本,並重設用來追蹤各流程讀取到哪裡的串流檢查點。 你的轉換不會執行,且沒有原始資料被重新處理。
下一次管線運行時會重播。 它會根據目前的管線定義,從回溯點重新處理,追趕至目前進度,然後恢復正常的增量處理。 Rewind 不會啟動該管線,因此請在準備就緒後自行啟動。
管線會自動產生回復點,約每小時一次,並將其保留 7 天。 你剛建立的管線在產生第一個可回溯點之前,沒有可回溯的內容。
將資料集回溯,也會將同一管線中位於其下游的所有項目一併回溯。 Rewind 適用於一個管道。 它不會與其他管線或相同資料表的外部讀取器協調,因此請分別管理這些資料表。
使用 UI 將管線回復到先前狀態
UI 和 Genie 是使用 rewind 的主要方式。 介面會列出可用的倒帶點,並在你提交前顯示各倒帶點會影響哪些資料集。
- 在管線頁面上,按一下 按鈕(位於
執行管線 旁邊),然後按一下 回溯管線。
- 選擇倒帶點,或使用捷徑如「 倒帶到昨天 」或「 倒帶到最新時間點」。 按一下「下一步」。
- 選擇要包含哪些表格。 使用 圖 視圖來選擇管線圖中的資料集,或使用 清單 視圖從表格中選取資料集。 維持重置所有檢查點為已選取狀態(預設值),即可還原來源偏移量、運算子狀態以及資料表資料,讓管線從回溯點開始重新處理。 清除它只用於還原資料表資料,不重新處理,例如當你想還原資料表內容但不想重新處理受影響的資料時。 此設定在資料表及其上游項目中必須相同,且對於讀取 Kafka 或 Auto Loader 等外部來源的流程,不得清除此設定。 按一下「下一步」。
- 檢視倒帶點、檢查點設定及受影響的資料集,然後點擊 倒帶。
啟動管線以重新播放資料。
你可以重複倒帶。 每次倒帶都會取代上一次,所以你還能從失敗的重玩中倒帶到別處來恢復。
倒帶之後
重新播放失敗會使管線回退,但處於停止狀態。 修正程式碼或原始資料,然後啟動管線重試或倒帶到另一個點。 管線不會自行回滾,錯誤會透過標準管線診斷和事件日誌浮現。
只有當目前的管線定義與已還原的狀態相容時,重放才會成功;倒帶不會放寬 Structured Streaming 的相容性規則。 關於哪些變更相容,請參見 結構化串流查詢中的變更類型。 實體化檢視遵循批次語意並容忍更廣泛的結構變更,但若相依不相容仍會失敗。
回捲若在進行到一半時失敗,可能會使管線處於部分回捲的狀態。 你有兩個選擇:
- 再倒帶到同一點或另一個點,管線就會收斂到那個點。
- 若要在回復未完成的情況下仍強制管線開始正常更新,請將
pipelines.allowUpdateAfterIncompleteRewind設為true,然後重新啟動管線。
可回溯到多久之前
還原點會保留 7 天。 在該時間範圍內,如果回溯所需的資料已遭移除,回溯就會失敗。 在依賴 rewind 功能之前,請先確認以下幾點:
-
VACUUM或是在你的桌上放一個短的delta.deletedFileRetentionDuration。 請參見 使用表格歷史記錄。 - 來源資料保留期限短於你想回溯的時間範圍,例如僅保留一天的 Kafka 主題。
具有多個來源或較長相依性鏈的管線需要更長的保留期,因為每個資料表和檢查點都必須回溯到一致的時間點。
Limitations
- Rewind 無法將管線還原到完整重新整理前的某個時間點。
- 倒帶點會保留 7 天;如果為了回到該時間點所需的資料表歷史記錄或來源資料已遭移除,則倒帶作業會失敗,例如因為
VACUUM或來源資料保留期間過短。 請參閱你可以回溯到多久之前。 - 不支援即時模式。
- Kinesis、Pulsar、Google Pub/Sub 以及使用 DSv2 或 Python 資料來源 API 建置的自訂原始碼不被支援作為原始碼。
- 外部合成器與自訂合成器不被支援,包括定義為
create_sink()的 。 請參見 :在管線中使用水槽。 - 使用列過濾器或欄遮罩的串流資料表無法倒帶。 請參閱 手動應用列篩選器和欄位遮罩。
- 狀態式回溯需要使用 RocksDB 狀態存放區,而管線預設會使用此存放區。 對於設定為使用不同狀態存放區的流程,回溯會失敗。
- 有些 AUTO CDC 串流資料表需要先重新整理,之後才能回溯。 當你要求回捲時,管線會通知你。
- 實體化檢視在回溯後,可能會進行完整重新計算,而非增量更新。 如需具體化檢視 ,請參閱累加式重新整理。
- Rewind 只涵蓋一條管線,不會與外部讀取器或其他讀取相同資料表的管線協調。
- Rewind 不會還原管線程式碼、管線設定或 Unity Catalog 物件元資料(如標籤和授權)。