假设我有一个分区的配置单元表
>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() 等)失败并出现错误
输入路径不存在:path/to/table/in_date=20-09-2020
有谁知道这是否会导致其他问题/破坏其他应用程序?
在 Tez 上,它会导致 FileNotFound 异常,因为分区元数据存在且文件夹不存在。也删除分区:
ALTER TABLE DROP PARTITION(in_date='20-09-2020')
TLDR:它会破坏应用程序,因为元数据将指示分区存在,但这是错误的。
长答案: 是的。如果你讨厌自己,就去做吧。基本上,HDFS 上任何引用元存储的应用程序都会找到该分区,然后尝试对其进行任何活动。当它尝试这样做时,HDFS 将崩溃,因为它找不到该目录。所以,即使你成功了,你也会失败(不,你不会在这里成为“Baazigar”)。