【问题标题】:Drop hive partition by date range按日期范围删除 hive 分区
【发布时间】:2015-02-04 02:20:19
【问题描述】:

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

我有一个名为 test store 的表作为序列文件和一些按 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-07-21 和 2014-07-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

但实际上,这3个分区被删除了:

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

似乎 hive drop 分区只使用date_dim&lt;='2014-07-30' 条件。

有没有按照我的意愿制作 hive drop 分区?

【问题讨论】:

    标签: hive


    【解决方案1】:

    您应该将字符串转换为日期类型,为此您可以使用 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 line 1:59 mismatched input '(' Expecting set null in drop partition statement (state=42000,code=40000)
    • 确保 loaddate 字段具有适当的类型。字符串、时间戳对比
    猜你喜欢
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2013-11-04
    • 2021-11-16
    相关资源
    最近更新 更多