我们如何删除具有其基本文件结构的HIVE表,而又不破坏同一路径下的另一个表?

问题描述 投票:0回答:1

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

我希望能够删除具有HDFS文件路径的表,而不会破坏同一共享路径中的其他表。

通过执行以下操作:

drop table test;

然后:

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

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

在另一篇文章中,我找到了此解决方案:

--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语句,因为出现了权限拒绝错误(用户在表上没有[ALTER]特权)

还有其他解决方案吗?

hadoop hive hdfs hadoop-partitioning
1个回答
0
投票

如果您有两个使用相同位置的表,那么此位置中的所有文件都属于这两个表,它们的创建方式无关紧要。

[假设您的table1的位置为hdfs/file/path/folder,并且table2的位置为hdfs/file/path/folder,并且在table1中插入了一些数据,则创建文件并从table2中进行选择来读取文件,反之亦然:如果您插入table2,则可以从table1访问新文件。这是因为无论您如何将文件放置在该位置中,都将表数据存储在该位置中。您可以使用SQL将数据插入表中,手动将文件放置到位置,等等。

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

为了更好地理解,请同时阅读此答案以及有关同一位置顶部的多个表的示例:https://stackoverflow.com/a/54038932/2700344

© www.soinside.com 2019 - 2024. All rights reserved.