假设在同一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]权限)
还有别的解决办法吗?
1条答案
按热度按时间ldioqlga1#
如果有两个表使用同一位置,则此位置中的所有文件都属于这两个表,而不管它们是如何创建的。
如果你有
table1
带位置hdfs/file/path/folder
以及table2
在同一地点hdfs/file/path/folder
你把一些数据插入table1
,则会创建文件并读取它们(如果从中选择)table2
,反之亦然:如果插入table2
,新文件将从table1
. 这是因为表数据存储在该位置,而不管您如何将文件放入该位置。您可以使用sql将数据插入表中,手动将文件放入位置,等等。每个表或分区都有其位置,不能单独指定文件。
为了更好地理解,请阅读以下答案,并举例说明同一位置上的多个表:https://stackoverflow.com/a/54038932/2700344