在hive中对⽇期数据进⾏处理,毫秒级时间转化为yyyy-MM-
dd格式
我们看到⽇志的时间是1414381913000 ,我们在需求中需要对每天的数据进⾏分析,所以需要对这个⽇志数据进⾏转化格式。
常⽤时间类型格式转换:
from_unixtime(bigint unixtime,[string format]): 时间戳转⽇期函数,
unix_timestamp([string date]): 转换成时间戳,然后转换格式为“yyyy-MM-dd HH:mm:ss“的⽇期
到UNIX时间戳。如果转化失败,则返回0,返回bigint类型
to_date(string timestamp): 将时间戳转换成⽇期,默认格式为2011-12-08 10:03:01
year() : 将时间戳转换成年,默认格式为2011-12-08 10:03:01
month() : 将时间戳转换成⽉,默认格式为2011-12-08 10:03:01
hour() : 将时间戳转换成⼩时,默认格式为2011-12-08 10:03:01
day(string date) : 将时间戳转换成天,默认格式为2011-12-08 10:03:01
date_diff(string enddate, string startdate) : ⽇期⽐较函数,反回结束⽇期减去开始⽇期的
天数
date_sub(string startdate, int days) : ⽇期减少函数,返回开始⽇期减少days天后的⽇期字符
串
date_add(string startdate, int days) : ⽇期增加函数,返回开始⽇期增加days天后的⽇期字符
串
unix时间戳转换日期格式last_day(string date) : 返回该⽉的最后⼀天的⽇期,可忽略时分秒部分(HH:mm:ss)。
last_day(string date)返回string类型的值。
next_day(string date,string x) : 返回下⼀个星期x的⽇期(x为前两英⽂星期前两位或者全写
MONDAY),返回字符串。
current_date() : 获取当天的⽇期,返回字符串,没有任何的参数。
current_timestamp() : 获取当前的时间戳
然后就是⼀顿操作:
放⼼这些都是实验品,哈哈
真正的语句:
select from_unixtime(cast(substr(LogTime,0,10) as bigint),"yyyy-MM-dd") from CharLogin limit 1;
0: jdbc:hive2://henu2:10000> select from_unixtime(cast(substr(LogTime,0,10) as bigint),"yyyy-MM-dd") from CharLogin limit 1; +-------------+--+
| _c0 |
+-------------+--+
| 2014-10-27 |
+-------------+--+
解决
对了,如果你是这样的需求:
select from_unixtime(cast(substr(LogTime,0,10) as bigint),"yyyyMMdd") from CharLogin limit 1;
0: jdbc:hive2://henu2:10000> select from_unixtime(cast(substr(LogTime,0,10) as bigint),"yyyyMMdd") from CharLogin limit 1; +-----------+--+
| _c0 |
+-----------+--+
| 20141027 |
+-----------+--+
改格式就⾏了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论