REPAIR TABLE
適用於:Databricks SQL Databricks Runtime
此命令會修復或修改非 Delta Lake 資料表的數據分割。 搭配 Delta Lake 使用 SYNC METADATA
子句,可以根據表格的元數據更新目錄服務,或者為已啟用 Iceberg 讀取的表格生成 Iceberg 元數據。
在 Unity Catalog 和 Hive metastore 之間,以及資料表是否由 Delta Lake 支援,所支援的功能有所不同。
語法
[ MSCK ] REPAIR TABLE table_name
{
[ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}
針對 Databricks SQL Databricks Runtime 12.2 LTS 和更新版本, MSCK
是選擇性的。
參數
-
資料表的名稱。 如果找不到資料表,Azure Databricks 就會產生 TABLE_OR_VIEW_NOT_FOUND 錯誤。
ADD
、DROP
或SYNC
PARTITIONS
適用於: Databricks SQL Databricks Runtime 10.4 LTS 和更新版本
使用
PARTITIONED BY
子句建立非 Delta 數據表時,會在 Hive 中繼存放區中產生並註冊數據分割。 不過,如果您從現有的數據建立分割數據表,則不會在Hive中繼存放區中自動註冊數據分割。 執行MSCK REPAIR TABLE
以註冊數據分割。另一個復原分割區的方式是使用 ALTER TABLE RECOVER PARTITIONS。
如果快取數據表,命令會清除資料表的快取數據,以及參考數據表的所有相依專案。 快取會在下次存取數據表或相依專案時填滿。
- ADD 命令會將新的分割區新增至會話目錄,供不屬於任何數據表分割區之基表資料夾中的所有子資料夾使用。 如果沒有指定其他選項,則 ADD 是預設自變數。
- DROP 命令會從文件系統中具有非現有位置的會話目錄卸除所有分割區。
- SYNC 是DROP和ADD的組合。
SYNC METADATA
僅適用於 Delta Lake。
讀取目標數據表的事務歷史記錄,並更新目錄服務中的元數據資訊。 若要執行此命令,您必須在目標數據表上擁有MODIFY和SELECT許可權,以及父架構和目錄的USE SCHEMA和USE CATALOG許可權。
此自變數適用於 Databricks Runtime 16.1 和更新版本中的 Hive 中繼存放區。 針對 Hive 中繼存放區數據表,您必須具有 USAGE 和 MODIFY 權限。
如果已啟用 Delta UniForm(需要 Unity 目錄),
SYNC METADATA
會觸發將目前的 Delta 元數據手動轉換成 Iceberg 元數據,並同步 Unity 目錄 Iceberg 端點的最新 Iceberg 版本。 請參閱<使用 UniForm 來讀取 Delta 資料表與 Iceberg 使用者端>。
範例 (非 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