hive日期函数-Demo

Posted wqbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive日期函数-Demo相关的知识,希望对你有一定的参考价值。

需求:某资产近一个月的资产值

比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日。最终需要的日期格式为:yyyyMMdd。

当日时间戳

unix_timestamp() 方法可得到当前时间的时间戳。

上月今日

使用 add_months(日期,N) 函数可将日期往前、往后推N个月。主要有两种格式:
add_months(‘yyyy-MM-dd hh:mm:ss’,N),add_months(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。例如:

hive> select add_months(2018-02-28, 3);
OK
2018-05-31
Time taken: 0.127 seconds, Fetched: 1 row(s)
hive> select add_months(2018-02-28, -3);
OK
2017-11-30
Time taken: 0.084 seconds, Fetched: 1 row(s)

时间戳格式化

由于add_months()方法的入参“日期”不能直接使用时间戳,需做一下转化。转化函数为:from_unixtime(时间戳, 日期、时间)。表现形式主要有:from_unixtime(时间戳, “yyyy-MM-dd hh:mm:ss”),from_unixtime(时间戳, “yyyy-MM-dd “)。如下:

hive> select from_unixtime(1519818348, yyyy-MM-dd);
OK
2018-02-28
Time taken: 0.088 seconds, Fetched: 1 row(s)
hive> select from_unixtime(1519818348, yyyy-MM-dd hh:mm:ss);
OK
2018-02-28 07:45:48
Time taken: 0.089 seconds, Fetched: 1 row(s)

往后一日

根据需求,当前日期往前推一个月后,还需往后推一日。往前、往后推N个日的函数为:date_add(日期,N)。主要有两种转换格式:date_add(‘yyyy-MM-dd hh:mm:ss’,N),date_add(‘yyyy-MM-dd’,N)。N为正往后推,N为负往前推。如下:

hive> select date_add(2018-02-28, 3);
OK
2018-03-03
Time taken: 0.089 seconds, Fetched: 1 row(s)
hive> select date_add(2018-02-28, -3);
OK
2018-02-25
Time taken: 0.085 seconds, Fetched: 1 row(s)

 

 

最终结果是:

from_unixtime(unix_timestamp(concat(date_add(add_months(from_unixtime(unix_timestamp(),yyyy-MM-dd hh:mm:ss),-1),1), 10:10:10)), yyyyMMdd)

 

我感觉他的 concat 一步还是比较多余,应该是没有深入理解unix_timestamp函数=》去使用拼串去 符合默认参数格式 ,最好指定参数格式

推荐

from_unixtime(unix_timestamp(date_add(add_months(from_unixtime(unix_timestamp(),yyyy-MM-dd hh:mm:ss),-1),1),yyyy-MM-dd), yyyyMMdd)

 


以上是关于hive日期函数-Demo的主要内容,如果未能解决你的问题,请参考以下文章

大数据之Hive:Hive中日期时间函数

hive函数总结-日期函数

hive6:字符串和日期的转换常用函数

hive 常用函数

hive日期转换函数2

使用 Hive 日期函数而不是硬编码日期字符串时,Hive 查询性能很慢?