[英]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.