我们如何才能删除一个 HIVE table 及其底层文件结构,而不破坏同一路径下的另一个 table?

How can we drop a HIVE table with its underlying file structure, without corrupting another table under the same path?

假设我们在相同的 HDFS 文件路径下创建了 2 个配置单元 table。

我希望能够删除一个 table WITH HDFS 文件路径,而不破坏同一共享路径中的另一个 table。

通过执行以下操作:

drop table test;

然后:

hadoop fs -rm -r hdfs/file/path/folder/*

我删除了两个 tables 文件,而不仅仅是我删除的那个。

在另一个 post 中,我找到了这个解决方案:

--changing the tbl properties to to make the table as internal
ALTER TABLE <table-name> SET TBLPROPERTIES('EXTERNAL'='False'); 
--now the table is internal if you drop the table data will be dropped automatically
drop table <table-name>; 

但是我无法通过 ALTER 语句,因为我遇到了权限被拒绝的错误(用户在 table 上没有 [ALTER] 权限)

还有其他解决方案吗?

如果您有两个 table 使用同一位置,那么此位置中的所有文件都属于这两个 table,无论它们是如何创建的。

假设您有 table1 的位置 hdfs/file/path/foldertable2 的相同位置 hdfs/file/path/folder 并且您将一些数据插入 table1,文件是如果您从 table2 select,它们将被创建,反之亦然:如果您插入 table2,则可以从 table1 访问新文件。这是因为 table 数据存储在该位置,无论您如何将文件放入该位置。您可以使用 SQL 将数据插入 table,手动将文件放入位置等。

每个 table 或分区都有它的位置,您不能单独指定文件。

为了更好地理解,另请阅读此答案,其中包含有关同一位置顶部多个 table 的示例: