共用方式為


REPAIR TABLE

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

此命令會修復或修改資料表的數據分割。

搭配 Delta Lake 使用 SYNC METADATA 子句,根據資料表元數據來更新目錄服務,或針對啟用 Iceberg 讀取的資料表產生 Apache Iceberg 元數據。 當您修改非 Delta Lake 數據表的數據分割時,請勿使用 SYNC METADATA

支援的功能取決於數據表是在 Unity 目錄或 Hive 中繼存放區中註冊,以及數據表是否由 Delta Lake 支援。

語法

[ 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下降添加的組合。
  • SYNC METADATA

    僅適用於 Delta Lake。

    如果組態 spark.databricks.delta.catalog.update.enabled 設定為 true,則目標數據表元數據更新會自動同步至目錄服務。 否則,可能需要使用 REPAIR TABLE table_name SYNC METADATA 手動同步處理。

    讀取目標數據表的事務歷史記錄,並更新目錄服務中的元數據資訊。 若要執行此命令,您必須在目標數據表上擁有MODIFY和 SELECT 許可權,以及父架構和目錄上的 USE SCHEMA 和 USE CATALOG 許可權。

    此自變數適用於 Databricks Runtime 16.1 和更新版本中的 Hive 中繼存放區。 針對 Hive 中繼存放區數據表,您必須具有 USAGE 和 MODIFY 權限。

    如果已啟用 Delta UniForm(需要 Unity 目錄),SYNC METADATA 會觸發將目前的 Delta 元數據手動轉換成 Iceberg 元數據,並同步 Unity 目錄 Iceberg 端點的最新 Iceberg 版本。 請參閱 使用 Iceberg 用戶端讀取 Delta 數據表。

    您可以使用 REPAIR TABLE table_name SYNC METADATA 將 Unity 目錄許可權模型套用至您從使用 Hive 中繼存放區同盟所建立之外部目錄讀取的淺層複製。 參見 使用淺層複製

範例 (非 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