REPAIR TABLE

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

此命令會將 Delta 資料表中繼資料更新為 Unity 目錄服務。 針對非 Delta 資料表,它會修復資料表的資料分割,並更新 Hive 中繼存放區。

  • 差異資料表:使用 引數使用 SYNC METADATA Delta 資料表執行時,此命令會讀取目標資料表的差異記錄檔,並將中繼資料資訊更新至 Unity 目錄服務。
  • 非差異資料表:使用非 Delta 資料表執行時,此命令會復原非 Delta 資料表目錄中的所有分割區,並更新 Hive 中繼存放區。

語法

[ MSCK ] REPAIR TABLE table_name
{
    [ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}

針對 標示為是 Databricks SQL 檢查的檢查,標示為是 Databricks Runtime 12.1 和更新版本, MSCK 是選擇性的。

參數

  • table_name

    資料表的名稱。 如果找不到資料表,Azure Databricks 就會引發 TABLE_OR_VIEW_NOT_FOUND 錯誤。

  • ADD或 或 DROPSYNCPARTITIONS

    適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime 10.0 和更新版本

    使用 PARTITIONED BY 子句建立非 Delta 資料表時,會在 Hive 中繼存放區中產生及註冊資料分割。 不過,如果您從現有的資料建立分割資料表,則不會在 Hive 中繼存放區中自動註冊資料分割。 執行 MSCK REPAIR TABLE 以註冊資料分割。

    另一種復原資料分割的方式是使用 ALTER TABLE RECOVER PARTITIONS

    如果快取資料表,命令會清除資料表的快取資料,以及參考資料表的所有相依專案。 下次存取資料表或相依專案時,快取會填滿。

    • ADD 命令會將新的分割區新增至基表資料夾中不屬於任何資料表分割區之所有子資料夾的會話目錄。 如果未指定其他選項,則 ADD是預設引數。
    • DROP 命令會從在檔案系統中具有非現有位置的會話目錄卸載所有分割區。
    • SYNCDROPADD的組合。
  • ** SYNC METADATA**

    讀取目標資料表的差異記錄,並更新 Unity 目錄服務中的中繼資料資訊。 若要執行此命令,您必須具有目標資料表的 MODIFY 和 SELECT 許可權,以及父架構和目錄的 USAGE。 如果目標資料表未儲存在 Unity 目錄,則具有這個引數的此命令將會失敗。

    如果已啟用 Delta UniForm,會觸發手動將目前 Delta 中繼資料轉換成 Iceberg 中繼資料, SYNC METADATA 並同步 Unity Catalog Iceberg 端點的最新 Iceberg 版本。 如需 與 Delta 資料表的 Iceberg 相容性,請參閱 UniForm (通用格式)

(非 Delta Lake 資料表) 範例

-- create a partitioned table from existing data /tmp/namesAndAges.parquet
> CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
  LOCATION "/tmp/namesAndAges.parquet";

-- SELECT * FROM t1 does not return results
> SELECT * FROM t1;

-- run MSCK REPAIR TABLE to recovers all the partitions
> MSCK REPAIR TABLE t1;

-- SELECT * FROM t1 returns results
> SELECT * FROM t1;
    name age
  ------- ---
  Michael  20
   Justin  19
     Andy  30

(Unity 目錄資料表) 範例

-- run MSCK REPAIR TABLE t1 SYNC METADATA to update the metadata info to Unity Catalog service
> MSCK REPAIR TABLE t1 SYNC METADATA