我在我的环境中使用 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<='2014-07-30' 条件。

无论如何,是否可以按照我的意愿制作 hive drop 分区?

最佳答案

您应该将字符串转换为日期类型,为此您可以使用 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'))

关于hive - 按日期范围删除配置单元分区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28312441/

10-16 04:03