删除Hadoop外部表后重建同名表仍存在旧数据的技术咨询
问题解答
1. 删除并重建同名外部表为何会出现旧数据?
是的,这种情况必然会出现旧数据,核心原因在于外部表的特性:
- 执行
DROP TABLE SCHEMA.TABLENAME删除外部表时,仅删除Hive/BigSQL中的元数据(表结构定义),HDFS上存储的实际数据文件会完整保留。 - 用相同语句重建同名外部表时,若未指定
LOCATION参数,系统会默认复用旧表的HDFS存储路径(通常为/warehouse/tablespace/external/hive/[schema]/db/[tablename]格式),因此重建后的表会直接加载原路径下的旧数据。
2. 如何获得同名空表?
根据需求分两种场景处理:
场景1:保留表结构,清空现有数据
若无需删除表结构,仅需清空数据,按以下步骤操作:
- 修改表属性,允许外部表被截断:
ALTER TABLE SCHEMA.TABLENAME SET TBLPROPERTIES ('external.table.purge'='true');
- 执行截断命令清空数据:
TRUNCATE TABLE SCHEMA.TABLENAME;
注:如果是分区表,
TRUNCATE会清空所有分区数据;如需清空指定分区,可使用TRUNCATE TABLE SCHEMA.TABLENAME PARTITION (partition_col='value')。
场景2:删除表后重建空表
若必须删除表再重建,需彻底清理旧数据:
- 先通过
DESCRIBE FORMATTED SCHEMA.TABLENAME查看表的Location字段,获取HDFS存储路径,再删除路径下的所有数据:
hdfs dfs -rm -r /path/to/your/table/storage
- 执行删除表命令:
DROP TABLE SCHEMA.TABLENAME;
- 用原语句重建表,此时表即为空表。
补充:如果创建表时显式指定了
LOCATION参数,重建时要么更换新路径,要么先删除原路径下的所有数据,再重建表。
内容的提问来源于stack exchange,提问作者MoOn
相关产品推荐
相关产品推荐

