假设我们在相同的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]特权)
还有其他解决方案吗?
如果您有两个使用相同位置的表,那么此位置中的所有文件都属于这两个表,它们的创建方式无关紧要。
[假设您的table1
的位置为hdfs/file/path/folder
,并且table2
的位置为hdfs/file/path/folder
,并且在table1
中插入了一些数据,则创建文件并从table2
中进行选择来读取文件,反之亦然:如果您插入table2
,则可以从table1
访问新文件。这是因为无论您如何将文件放置在该位置中,都将表数据存储在该位置中。您可以使用SQL将数据插入表中,手动将文件放置到位置,等等。
每个表或分区都有它的位置,不能单独指定文件。
为了更好地理解,请同时阅读此答案以及有关同一位置顶部的多个表的示例:https://stackoverflow.com/a/54038932/2700344