drop table命令未删除由spark-sql创建的配置单元表的路径

时间:2018-07-20 22:38:19

标签: apache-spark hive apache-spark-sql beeline hive-query

我试图删除已创建Spark-Sql的表(内部)表,但如何删除表,但表的位置仍然存在。有人可以让我知道怎么做吗?

我尝试了Beeline和Spark-Sql

    create table something(hello string)
    PARTITIONED BY(date_d string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "^"
    LOCATION "hdfs://path"
    )
    Drop table something;
No rows affected (0.945 seconds)

谢谢

1 个答案:

答案 0 :(得分:3)

Spark在内部使用Hive Metastore创建表。如果该表是从spark创建为外部配置单元表,即HDFS中存在的数据,并且Hive提供了有关该表的视图,那么drop table命令将仅删除Metastore信息,而不会从HDFS中删除数据。

因此,您可以采取一些替代策略

  1. 使用hadoop fs -rm -rf命令从HDFS手动删除数据
  2. 对要删除的表进行更改表,将外部表更改为内部表,然后删除该表。

    ALTER TABLE <table-name> SET TBLPROPERTIES('external'='false');

    drop table <table-name>;

第一条语句会将外部表转换为内部表,第二条语句将删除包含数据的表。