我有一个每日分区的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')