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
是選擇性的。
參數
-
資料表的名稱。 如果找不到資料表,Azure Databricks 就會引發 TABLE_OR_VIEW_NOT_FOUND 錯誤。
ADD
或 或DROP
SYNC
PARTITIONS
適用于: Databricks SQL Databricks Runtime 10.0 和更新版本
使用
PARTITIONED BY
子句建立非 Delta 資料表時,會在 Hive 中繼存放區中產生及註冊資料分割。 不過,如果您從現有的資料建立分割資料表,則不會在 Hive 中繼存放區中自動註冊資料分割。 執行MSCK REPAIR TABLE
以註冊資料分割。另一種復原資料分割的方式是使用 ALTER TABLE RECOVER PARTITIONS。
如果快取資料表,命令會清除資料表的快取資料,以及參考資料表的所有相依專案。 下次存取資料表或相依專案時,快取會填滿。
- ADD 命令會將新的分割區新增至基表資料夾中不屬於任何資料表分割區之所有子資料夾的會話目錄。 如果未指定其他選項,則 ADD是預設引數。
- DROP 命令會從在檔案系統中具有非現有位置的會話目錄卸載所有分割區。
- SYNC 是 DROP 和 ADD的組合。
**
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