动态删除hive分区

问题描述 投票:0回答:3

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

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

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

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

hive
3个回答
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


0
投票

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

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

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

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

现在插入新数据。


0
投票

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

Alter table mytable drop partition (datehour >= '20160922')
© www.soinside.com 2019 - 2024. All rights reserved.