共用方式為


FSCK REPAIR TABLE

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

偵測並修復 Delta 資料表的元資料與資料檔案問題。 該指揮部有三個漸進層級:

  • 只修復交易記錄
  • 修復交易日誌並移除遺失的資料檔案
  • 修復交易日誌、移除遺失的資料檔案,以及損壞的資料檔案

每個關卡包含前一關的所有操作。

語法

FSCK REPAIR TABLE table_name [fsck_mode] [DRY RUN]

fsck_mode
  { METADATA ONLY |
    VERIFY ALL FILES |
    VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp }

參數

  • table_name

    識別現有的 Delta 數據表。 名稱不得包含 時態規格或選項規格

  • fsck_mode

    適用於:勾選是 Databricks 執行環境 18.0 及以後版本

    定義了該採取哪些行動。

    • 若未指定(預設模式):

      • 驗證並修復建構最新資料表快照所需的交易日誌。
      • 移除資料表中對底層檔案系統中已不存在的資料檔案的參考。
      • 移除資料表中對分割值違反 NOT NULL 約束的資料檔案的參考。
    • METADATA ONLY

      驗證並修復建構最新資料表快照所需的交易日誌。

    • VERIFY ALL FILES

      所有操作皆以預設模式執行。 驗證所有活躍資料檔案的完整性。 移除表格中對任何完整性檢查失敗檔案的參考。

    • VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp

      所有操作皆以預設模式執行。 驗證修改時間落在指定時間窗內的活躍資料檔案的完整性。 移除表格中對於未通過完整性檢查的檔案的參考。 start_timestampend_timestamp 都必須是常數運算式,並且其結果必須為時間戳記。 這些表達式可以包含 current_timestamp()current_date() 功能。

  • 模擬測試

    不做修改的情況下,報告FSCK REPAIR TABLE會修正的元數據和資料檔案問題。

    根據預設, DRY RUN 只會傳回前 1000 個檔案。 你可以在執行筆記本指令前,將會話變數 spark.databricks.delta.fsck.maxNumEntriesInResult 設定為較高的值來提高這個閾值。

註釋

  • FSCK 只修復最新的資料表快照。 歷史檢查點與非活躍檔案不會被驗證或修復。

  • 在檢查預設模式下檔案存在或驗證檔案完整性 VERIFY 時, FSCK 也會驗證任何相關的刪除向量。 若 Parquet 資料檔或其相關的刪除向量遺失或損壞,該參考資料將從資料表中移除。

傳回

當執行DRY RUN時,指令會回傳一個架構如下的DataFrame:

  • dataFilePath STRING NOT NULL
  • dataFileMissing BOOLEAN NOT NULL
  • deletionVectorPath STRING
  • deletionVectorFileMissing BOOLEAN NOT NULL

適用於:勾選確認 Databricks 執行時間 18.0 及以後版本

  • checkpointFilePath STRING
  • fileCrcCorrupt BOOLEAN NOT NULL
  • fileUnreadable BOOLEAN NOT NULL
  • fileMetadataHasInvalidPartitionValues BOOLEAN NOT NULL
  • deletionVectorCorrupt BOOLEAN NOT NULL

範例

— Assume 005.checkpoint.parquet has CRC checksum corruption.
> FSCK REPAIR TABLE t METADATA ONLY DRY RUN;
 dataFilePath dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath                fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------ --------------- ------------------ ------------------------- --------------------------------- -------------- -------------- ------------------------------------- ---------------------
 null         false           null               false                     _delta_log/005.checkpoint.parquet true           false          false                                 false

— Assume file1.parquet is missing, whose deletion vector dv1.bin is also missing.
— Assume file2.parquet has partition value being NULL, where the partition column is NOT NULL.
> FSCK REPAIR TABLE t DRY RUN;
 dataFilePath  dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------- --------------- ------------------ ------------------------- ------------------ -------------- -------------- ------------------------------------- ---------------------
 file2.parquet true            dv1.bin            true                      null               false          false          false                                 false
 file2.parquet false           null               false                     null               null           null           true                                  false

— Assume file1.parquet is corrupt and unreadable.
— Assume file2.parquet has a corrupt deletion vector dv2.bin.
> FSCK REPAIR TABLE t VERIFY ALL FILES DRY RUN;
 dataFilePath  dataFileMissing deletionVectorPath deletionVectorFileMissing checkpointFilePath fileCrcCorrupt fileUnreadable fileMetadataHasInvalidPartitionValues deletionVectorCorrupt
 ------------- --------------- ------------------ ------------------------- ------------------ -------------- -------------- ------------------------------------- ---------------------
 file1.parquet false           null               false                     null               false          true           false                                 false
 file2.parquet false           dv2.bin            false                     null               null           null           false                                 true