动态删除hive分区

时间:2016-09-23 21:02:22

标签: hive

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

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

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

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

3 个答案:

答案 0 :(得分:0)

你不能直接在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 if if exists partition

答案 1 :(得分:0)

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

  

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

     

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

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

现在插入新数据。

答案 2 :(得分:0)

您可以删除提供范围过滤器的分区。供参考,请参阅答案:https://stackoverflow.com/a/48422251/3132181 因此您的代码可能像这样:

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