在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天后的日期字符
串
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  |
+-----------+--+

 改格式就行了!!!

 

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页