我有一个每日分区的HIVE表,如下所示(包括未来日期的分区)
20160901
20160902
........
........
........
20160931
20161001
20161002
我想传递一个日期,例如昨天的日期20160922,并且想要动态删除所有分区> = 20160922(虽然今天是20160923,但我想从20160922日期开始)。
如何动态删除所有这些分区。
答案 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')