是否可以手动从HDFS删除hive表的分区目录而不删除分区?

  • 本文关键字:分区 删除 hive HDFS 是否 hadoop hive
  • 更新时间 :
  • 英文 :


假设我有一个分区的hive表

>show partitions db.my_table;
+----------------------------------+
|             partition            |
+----------------------------------+
|        in_date=20-09-2020        |
|        in_date=21-09-2020        |
|        in_date=22-09-2020        |
+----------------------------------+

如果我手动删除HDFS的分区目录

$hadoop fs -rm -r 'path/to/table/in_date=20-09-2020';

但是不要从hive表中删除分区

它会导致任何实际问题(除了在表元数据中有孤立的分区名称)吗?

我已验证的内容

hive表查询工作良好(外部和内部表)

>select * from db.my_table;   --works fine
>show partitions db.my_table  --shows orphaned partitions,not a real problem

编辑:聚合函数查询如COUNT(),MAX()等失败错误
        输入路径不存在:路径//表/in_date = 20-09-2020

有谁知道这是否会导致其他问题/破坏其他应用程序?

在Tez上导致FileNotFound异常,因为分区元数据存在并且文件夹不存在。删除分区:ALTER TABLE DROP PARTITION(in_date='20-09-2020')

TLDR:它将破坏应用程序,因为元数据将指示分区存在,这是假的。

长答:是的。如果你讨厌自己,就去做吧。基本上,HDFS上任何引用metastore的应用程序都会找到分区,然后尝试在其上进行任何活动。当它尝试这样做时,HDFS会爆炸,因为它找不到目录。所以即使你成功了,你也会失败(不,你不会是这里的"Baazigar")。