帶有Metastore的元數據損壞的桌子

了解如何刪除包含Metastore損壞的元數據的桌子。

寫的亞當·帕夫拉卡(Adam Pavlacka)

上次出版於:2022年5月16日

問題

有時您不能從數據鏈球界UI上刪除表。使用%SQL或者spark.sql丟棄表也不起作用。

原因

存儲在Metastore中的元數據(表格架)已損壞。當您跑步時掉落表命令,Spark檢查表是否在丟棄表之前是否存在。由於元數據因桌子而被損壞,因此火花無法放下桌子,並且在以下例外情況下失敗。

%scala com.databricks.backend.common.rpc.databricksexceptions $ sqlexecutionException:org.apache.spark.sql.sql.analysisexception:元數據已損壞

解決方案

使用Hive客戶端放置表,因為Hive客戶端沒有像Spark那樣檢查表的存在。放桌子:

  1. 在Hive軟件包內創建功能。
    %scala package org.apache.spark.sql.hive { import org.apache.spark.sql.hive.HiveUtils import org.apache.spark.SparkContext object utils { def dropTable(sc: SparkContext, dbName: String, tableName: String,ignoreifnotexists:boolean,清除:布爾值):單位= {hiveutils .newclientformetadata(sc.getConf,sc.hadoopconfiguration).droptable(dbname,tablEname,nakorifnote,bignoreifnotexists,false)}}}}}}}}}}}}}}}}}}}}}}}}}
  2. 掉落桌子。
    %scala導入org.apache.spark.sql.hive.utils utils.droptable(sc,“默認”,“ my_table”,true,true)