从 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 表中吗?的主要内容,如果未能解决你的问题,请参考以下文章

hive外部表分区

hive中怎么删除表中的部分数据

hive中怎么删除表中的部分数据

hive中怎样删除分区

删除与分区相关的hdfs文件后无法联系hive表分区

入门大数据---Hive分区表和分桶表