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] 权限)

还有其他解决方案吗?

4

1 回答 1

1

如果您有两个使用相同位置的表,则该位置中的所有文件都属于这两个表,无论它们是如何创建的。

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

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

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

于 2020-05-05T18:48:06.743 回答