繁体   English   中英

动态删除蜂巢分区

[英]dropping hive partition dynamically

我有一个HIVE表,该表每天都有每日分区,如下所示(还包括将来日期的分区)

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

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

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

您不能直接在配置单元中执行,因为它不支持动态sql。

可以使用shell脚本/或具有如下所示的删除分区脚本的任何脚本创建文件来解决。

如果存在分区,则更改表partition_t drop(y = 20160922);

如果存在分区(y = 20160921),则更改表partition_t删除;

如果存在分区(y = 20160920),则更改表partition_t删除; ...

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

如果存在分区,则更改表partition_t

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

1)转到该表的Hdfs文件夹,然后使用命令行管理程序删除表目录中的所有文件夹。 hadoop fs -rm r <>

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

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

现在插入新数据。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM