Hive - 如何从 Hive 获取最近几个月的数据?

Posted

技术标签:

【中文标题】Hive - 如何从 Hive 获取最近几个月的数据?【英文标题】:Hive - How do I get last months of data from Hive? 【发布时间】:2015-06-03 13:07:14 【问题描述】:

如何从 Hive 获取最近 2 个月的数据?

这是我的尝试:

select (date_add(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'),
     2 - month(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd')) 
    ));

这导致 2015-05-30。结果应该是:如果今天是“2015-06-03”,那么过去两个月的结果应该是:“2015-04-01”。请注意,我将每月的第一天作为结果。我在这里做错了什么?谢谢!

补充说明:

在 SQL 中是不是很容易得到:

 select * from date_field >= DATEADD(MONTH, -2, GETDATE());

【问题讨论】:

为什么两个月前是 2015-04-01 而不是 2015-04-03? ***.com/questions/27567896/… 【参考方案1】:

date_add 添加天数,而不是月数。下面的行计算为-4

2 - month(FROM_UNIXTIME(UNIX_TIMESTAMP(), 'yyyy-MM-dd'))

所以你基本上是从“2015-06-03”中减去 4 天,这就是为什么你会得到结果“2015-05-30”。

据我所知,在 Hive 中没有直接减去月份的方法。您可以考虑的解决方案:

    减去 60 天,但这不会为您提供准确的结果。 编写自定义 UDF 以返回 2 个月前的日期。 在脚本中计算日期,并将其传递给 hive。

【讨论】:

以上是关于Hive - 如何从 Hive 获取最近几个月的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Hive SQL 整数 YYYYMM 前几个月

Hive ALTER 命令删除值超过 24 个月的分区

在 HIVE 中选择上个月的 YYYYMM

如何从 Hive 表中获取月份 = 当前月份 else 月份 = 上个月(当前月份 - 1)的记录?

用HIVESQL怎么获取上一个月的月份

如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?