從metastore中刪除帶有損壞元數據的表

了解如何從metastore刪除包含已損壞元數據的表。

寫的亞當Pavlacka

最後發布日期:2022年5月16日

問題

有時不能從Databricks UI中刪除表。使用%的sqlspark.sqldrop table也不行。

導致

存儲在metastore中的元數據(表模式)已損壞。當你奔跑刪除表命令時,Spark會檢查表是否存在,然後再刪除表。由於表的元數據已損壞,Spark無法刪除表,並出現以下異常。

%scala com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: org.apache.spark.sql.AnalysisException:元數據已損壞

解決方案

使用Hive客戶端刪除表,因為Hive客戶端不像Spark那樣檢查表是否存在。放下一張桌子:

  1. 在Hive包中創建一個函數。
    %scala包org.apache.spark.sql.hive {import org.apache.spark. hive.HiveUtils導入org.apache.spark.SparkContext對象utils {def dropTable(sc: SparkContext, dbName: String, tableName: String, ignoreIfNotExists: Boolean, purge: Boolean): Unit = {HiveUtils . newclientformetadata (sc. apache.spark. hive.HiveUtils)getConf, sc.hadoopConfiguration) .dropTable(dbName, tableName, ignoreIfNotExists, false)}}}
  2. 刪除損壞的表。
    導入org.apache.spark.sql.hive.utils utils。dropTable(sc, "default", "my_table", true, true)
這篇文章有用嗎?