目录
from_unixtimefrom_unixtime
日期转小时函数hour与年月日分秒
hive sql 中时间戳转换函数: 由bigint类型的值转换为指定时间戳格式; from_unixtime()
from_unixtimefrom_unixtime(bigint unixtime[, string format])
返回值类型:string
功能: 转化UNIX时间戳(从1970-01-01 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式
示例:
hive (temp)> select from_unixtime(1323308943,'yyyyMMdd') from test;
20111208
hive (temp)> select from_unixtime(1323308943,'yyyy-MM-dd') from test;
2011-12-08
hive (temp)>select from_unixtime(1441565203,'yyyy/MM/dd HH:mm:ss') from test;
2015/09/07 02:46:43
具体的时间格式,可以调整第二个参数来指定。
相关示例:
info对应的字段值为如:48330a9a94d73db188c78ae6bdc58cbe|0|5|0|11|cxvideo_relate|1605655303|1|516||0|OvPMS|0|92201|1605655303076e5630d435593||a|2|0|comos%3Aiznctke14900
要拿到时间戳并转换为小时从经过group by操作的表中抽取出来。
分析: 先split分割值,拿到时间戳1605655303 ,然后转换为bigint后再转换为hour函数需要的时间格式的形式,再利用Hour函数读取其中的小时出来。具体代码形如:
max(hour(from_unixtime(cast(split(info,'\\\|')[6] as BIGINT),'yyyy-MM-dd HH:mm:ss'))) as hour
注: hive中的split 函数用于分割字符串
hour(string date)
返回日期中的小时,int类型的值
例子
hive (temp)> select hour('2016-12-08 10:03:01') from test;
10
类似的有: 日期转年函数: year(),转月,month(), 转天day() ,转分钟 month() ,转秒 second() ,转周函数 weekofyear() (此为返回当前日期处于一年中的第多少周)。
其他的有
date_sub | date_sub(string startdate, int days) | string | 返回开始日期startdate减少days天后的日期 |
date_add | date_add(string startdate, int days) | string | 返回开始日期startdate增加days天后的日期 |
datediff | datediff(string enddate, string startdate) | int | 返回结束日期减去开始日期的天数 |
示例
hive (temp)> select date_sub('2016-12-08',10) from dual;
2016-11-28
#当前日期为2016-08-25,在此基础上减7天
hive (temp)> select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) from dual;
2016-08-18
hive (temp)> select date_add('2016-12-08',10) from dual;
2016-12-18
#当前日期为2016-08-25,在此基础上加7天
hive (temp)> select date_add(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),7) from dual;
2016-09-01
hive (temp)> select datediff('2016-12-08','2016-12-02') from dual;
6
此为:
指定格式日期转UNIX时间戳函数为:unix_timestamp.
unix_timestamp(string date, string pattern) ,返回bigint类型的值,转换格式为"yyyyMMdd HH:mm:ss"的日期到UNIX时间戳。转化失败,则返回0
hive (temp)> select unix_timestamp('20160825 13:02:03','yyyyMMdd HH:mm:ss') from dual;
1472101323
日期时间转日期函数 : to_date
to_date(string timestamp) | string | 返回日期时间字段中的日期部分 |
hive (temp)> select to_date('2016-12-08 10:03:01') from dual;
2016-12-08
参考与鸣谢:https://www.jianshu.com/p/e30395941f9c