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.2 LTS 和更新版本, MSCK 是選擇性的。

參數

  • table_name

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

  • ADDDROPSYNCPARTITIONS

    適用於:檢查標示為是 Databricks SQL 檢查標示為是 Databricks Runtime 10.4 LTS 和更新版本

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

    另一個復原分割區的方式是使用 ALTER TABLE RECOVER PARTITIONS

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

    • ADD 命令會將新的分割區新增至會話目錄,供不屬於任何數據表分割區之基表資料夾中的所有子資料夾使用。 如果沒有指定其他選項,則 ADD 是預設自變數。
    • DROP 命令會從文件系統中具有非現有位置的會話目錄卸除所有分割區。
    • SYNC 是DROPADD的組合
  • ** SYNC METADATA**

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

    如果已啟用 Delta UniForm, SYNC METADATA 會觸發將目前的 Delta 元數據手動轉換成 Iceberg 元數據,並同步 Unity 目錄 Iceberg 端點的最新 Iceberg 版本。 如需與 Delta 資料表的相容性,請參閱通用格式 (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