drop table 命令不会删除由 spark-sql 创建的 hive 表的路径

san*_*nde 1 hive apache-spark 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)
Run Code Online (Sandbox Code Playgroud)

谢谢

Avi*_*rya 5

Spark 内部使用 Hive Metastore 来创建 Table。如果表是从 spark 创建的外部 hive 表,即 HDFS 中存在的数据,并且 Hive 提供了一个表视图,则 drop table 命令只会删除 Metastore 信息,不会从 HDFS 中删除数据。

所以你可以采取一些替代策略

  1. 使用 hadoop fs -rm -rf 命令手动删除 HDFS 中的数据
  2. 在要删除的表上执行 alter table,将外部表更改为内部表,然后删除该表。

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

    drop table <table-name>;

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