hadoop—我们如何删除具有底层文件结构的配置单元表,而不损坏同一路径下的另一个表?

0vvn1miw  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(299)

假设在同一hdfs文件路径下创建了两个配置单元表。
我希望能够删除一个具有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]权限)
还有别的解决办法吗?

ldioqlga

ldioqlga1#

如果有两个表使用同一位置,则此位置中的所有文件都属于这两个表,而不管它们是如何创建的。
如果你有 table1 带位置 hdfs/file/path/folder 以及 table2 在同一地点 hdfs/file/path/folder 你把一些数据插入 table1 ,则会创建文件并读取它们(如果从中选择) table2 ,反之亦然:如果插入 table2 ,新文件将从 table1 . 这是因为表数据存储在该位置,而不管您如何将文件放入该位置。您可以使用sql将数据插入表中,手动将文件放入位置,等等。
每个表或分区都有其位置,不能单独指定文件。
为了更好地理解,请阅读以下答案,并举例说明同一位置上的多个表:https://stackoverflow.com/a/54038932/2700344

相关问题