適用於:
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 }
參數
-
識別現有的 Delta 數據表。 名稱不得包含 時態規格或選項規格。
fsck_mode適用於:
Databricks 執行環境 18.0 及以後版本定義了該採取哪些行動。
若未指定(預設模式):
- 驗證並修復建構最新資料表快照所需的交易日誌。
- 移除資料表中對底層檔案系統中已不存在的資料檔案的參考。
- 移除資料表中對分割值違反
NOT NULL約束的資料檔案的參考。
METADATA ONLY驗證並修復建構最新資料表快照所需的交易日誌。
VERIFY ALL FILES所有操作皆以預設模式執行。 驗證所有活躍資料檔案的完整性。 移除表格中對任何完整性檢查失敗檔案的參考。
VERIFY FILES MODIFIED BETWEEN start_timestamp AND end_timestamp所有操作皆以預設模式執行。 驗證修改時間落在指定時間窗內的活躍資料檔案的完整性。 移除表格中對於未通過完整性檢查的檔案的參考。
start_timestamp和end_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 NULLdataFileMissing BOOLEAN NOT NULLdeletionVectorPath STRINGdeletionVectorFileMissing BOOLEAN NOT NULL
適用於:
Databricks 執行時間 18.0 及以後版本
checkpointFilePath STRINGfileCrcCorrupt BOOLEAN NOT NULLfileUnreadable BOOLEAN NOT NULLfileMetadataHasInvalidPartitionValues BOOLEAN NOT NULLdeletionVectorCorrupt 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