动态删除hive分区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态删除hive分区相关的知识,希望对你有一定的参考价值。

我有一个每日分区的HIVE表,如下所示(包括未来日期的分区)

20160901
20160902
........
........
........
20160931
20161001
20161002

我想传递一个日期,例如昨天的日期20160922,并且想要动态删除所有分区> = 20160922(尽管今天是20160923,但我想从20160922日期开始)。

如何动态删除所有这些分区。

答案

你不能直接在hive中做,因为它不支持动态sql。

可以使用shell脚本/或任何脚本创建具有drop partition脚本的文件,如下所示。

alter table partition_t drop if if exists partition(y = 20160922);

alter table partition_t drop if if exists partition(y = 20160921);

alter table partition_t drop if if exists partition(y = 20160920); ...

然后运行hive -v -f ./file.sh

如果存在分区,则alter table partition_t drop

另一答案

在将数据插入表之前执行以下步骤。

1)转到该表的Hdfs文件夹,并使用Shell命令删除表目录中的所有文件夹。 hadoop fs -rm r <>

2)运行MSCK修复表以更新有关分区的元数据。

以上两个步骤将根据模式删除所有可用分区。

现在插入新数据。

另一答案

您可以删除给出范围过滤器的分区。有关参考,请参阅答案:https://stackoverflow.com/a/48422251/3132181所以您的代码可能是这样的:

Alter table mytable drop partition (datehour >= '20160922')

以上是关于动态删除hive分区的主要内容,如果未能解决你的问题,请参考以下文章

hive中怎样删除分区

hive外部表分区

从 hdfs 中删除文件是不是会删除相应的 hive 外部表分区?

Hive分区分桶

删除 Hive 分区锁

Hive动态分区与静态分区,数据插入,区别