Hadoop 配置单元中的drop table命令
我正试图放下一张桌子,在蜂巢里重新创建它。删除表后,如果对表运行select查询,它将显示删除前表中的旧行。当表已经被删除时,这怎么可能呢?为什么即使在删除并重新创建表之后,它仍保留行Hadoop 配置单元中的drop table命令,hadoop,hive,bigdata,Hadoop,Hive,Bigdata,我正试图放下一张桌子,在蜂巢里重新创建它。删除表后,如果对表运行select查询,它将显示删除前表中的旧行。当表已经被删除时,这怎么可能呢?为什么即使在删除并重新创建表之后,它仍保留行 hive> select * from abc; A 30 B 40 hive> drop table abc; hive> create external table abc ( name string, qty int); hive> select * from abc;
hive> select * from abc;
A 30
B 40
hive> drop table abc;
hive> create external table abc ( name string, qty int);
hive> select * from abc;
A 30
B 40
我不知道Hive,但如果它与Oracle类似(我知道),那么外部表将指向存储在磁盘上的文件 因此,一旦你扔了它,你就不能使用它(当然)。但随后您创建了另一个外部表(请参见示例中的第5行),当然您可以再次从中进行选择
因为,您没有删除作为该外部表的数据源的文件。问题是您正在删除该外部表,因此,无论何时我们删除该表,该表的源文件仍然存在于该路径上,因此无论何时我们要创建具有相同表名的新外部表,都可以直接从中提取数据源路径,要解决此问题,请首先使用以下命令获取表的路径:
hive> describe formatted database_name.table_name;
然后复制描述中显示的整个位置,例如:
/用户/hive/warehouse/database\u name.db/table\u name
在此之后,使用以下命令截断给定表中的所有数据:
hive> dfs -rmr /user/hive/warehouse/database_name.db/table_name;
或
然后您可以使用DROP TABLE命令将其完全擦除。谢谢您的回复。谢谢您的解决方案。
hive> dfs -rm -r /user/hive/warehouse/database_name.db/table_name;