按日期范围删除Hive分区

3

我在我的环境中使用的是hive-0.10.0-cdh-4.7.0。

我有一个名为test的表,以序列文件的形式存储,并按date_dim分区,如下所示:

game=Test/date_dim=2014-07-01    
game=Test/date_dim=2014-07-11    
game=Test/date_dim=2014-07-21    
game=Test/date_dim=2014-07-31

我想在SQL命令中删除2014年7月21日至2014年7月30日期间的分区。
alter table test drop partition (date_dim>='2014-07-11',date_dim<='2014-07-30')

我希望删除这两个分区:

game=Test/date_dim=2014-07-11    
game=Test/date_dim=2014-07-21

但实际上,这三个分区将被删除:
game=Test/date_dim=2014-07-01
game=Test/date_dim=2014-07-11
game=Test/date_dim=2014-07-21

看起来hive删除分区只使用date_dim<='2014-07-30'这个条件。

有没有办法让hive按照我想要的方式删除分区?

1个回答

3

你需要将字符串转换为日期类型,可以使用unix_timestamp函数:

alter table test drop partition (unix_timestamp(date_dim,'yyyy-MM-dd')>=unix_timestamp('2014-07-11','yyyy-MM-dd'),unix_timestamp(date_dim,'yyyy-MM-dd')<=unix_timestamp('2014-07-30','yyyy-MM-dd'))

我遇到了一个错误。您有什么解决方法吗? alter table isso_evt_vw_prev drop partition (unix_timestamp(loaddate,'yyyyMMdd')>=unix_timestamp('20160219','yyyyMMdd')); 错误:编译语句时出错:FAILED: ParseException 行1:59 在删除分区语句中,输入不匹配'(',而期望是'set null'(state=42000,code=40000) - Raj
请确保loaddate字段具有适当的类型。字符串、时间戳等。 - HakkiBuyukcengiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接