問題
有時不能從Databricks UI中刪除表。使用%的sql或spark.sqldrop table也不行。
導致
存儲在metastore中的元數據(表模式)已損壞。當你奔跑刪除表命令時,Spark會檢查表是否存在,然後再刪除表。由於表的元數據已損壞,Spark無法刪除表,並出現以下異常。
%scala com.databricks.backend.common.rpc.DatabricksExceptions$SQLExecutionException: org.apache.spark.sql.AnalysisException:元數據已損壞
解決方案
使用Hive客戶端刪除表,因為Hive客戶端不像Spark那樣檢查表是否存在。放下一張桌子:
- 在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)}}}
- 刪除損壞的表。
導入org.apache.spark.sql.hive.utils utils。dropTable(sc, "default", "my_table", true, true)