从 HDFS 中删除分区目录,它会反映在 hive 表中吗?
Posted
技术标签:
【中文标题】从 HDFS 中删除分区目录,它会反映在 hive 表中吗?【英文标题】:Delete partition directories from HDFS, would it reflect in hive table? 【发布时间】:2017-03-09 07:21:02 【问题描述】:假设我创建了一个分区列为年、月和日的 hive 表,如果我从 hdfs 中删除分区,那么结果是否反映在 hive 表中
【问题讨论】:
“删除分区”是什么意思?删除所有目录+文件?只删除子目录并将文件放在***目录中? 删除所有目录+文件 How to update partition metadata in Hive , when partition data is manualy deleted from HDFS的可能重复 【参考方案1】:是的。分区数据将消失。
Metastore 仍将保存分区信息(元数据),您可以使用 show partition mytable
查看它。
您可以使用msck repair mytable
找到需要删除的分区。
你可以使用alter table mytable drop partition (...)
删除分区
【讨论】:
是的,但该结果是否会反映在 hive 表中? 它会偏离轨道。如何查询表并查看不再存在的数据? 谢谢!!它有助于我理解分区删除msck repair
不会反映 Metastore 中手动删除的文件夹,它只会将 HDFS 上但不在 Metastore 中的分区添加到 Metastore。
@cheseaux - 不会下降,但会反映。在这里查看我的答案***.com/a/44931540/6336479 我已经修复了这个答案。谢谢【参考方案2】:
Hive 表仍会显示分区,您必须手动删除在 HDFS 上删除的分区(或删除并重新创建表)并运行 MSCK。
命令:
如果您打算更改表并删除所有已删除的分区-
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE]; -- (Note: PURGE available in Hive 1.2.0 and later, IGNORE PROTECTION not available 2.0.0 and later)
我会选择删除并重新创建表,然后运行 MSCK。
将所有现有分区添加到表中-
msck repair table <table_name>
或者,您可以使用ALTER TABLE
删除所有分区,然后运行MSCK
命令。
【讨论】:
以上是关于从 HDFS 中删除分区目录,它会反映在 hive 表中吗?的主要内容,如果未能解决你的问题,请参考以下文章