加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

hive unix_timestamp格式说明

(2017-12-18 16:25:00)
分类: 大数据
     今天学习hive时间函数unix_timestamp,在练习期间碰到一个指定格式说明的小问题,如果不注意的情况下可能很难发现,下面说说我的练习过程,我给定一个时间值让hive计算其秒数,如下:
1. 使用unix_timestamp函数结果如下

hive> select to_unix_timestamp("20171218 15:55:37","yyyymmdd hh:mm:ss");
OK
1484726137
Time taken: 0.166 seconds, Fetched: 1 row(s)
hive> 

2. 使用from_unixtime计算unix时间(单位s)的日期时间格式
hive> select from_unixtime(1484726137);
OK
2017-01-18 15:55:37
Time taken: 0.148 seconds, Fetched: 1 row(s)
hive> 

3.比对结果中发现1的时间戳值倒过来计算时间的值不对应,这时认为函数有问题

4. 查看show functions中的所有函数中发现unix_timestamp有2个类似的:unix_timestamp和to_unix_timestamp

5.再次使用unix_timestamp计算的结果依然如此
hive> select unix_timestamp("20171218 15:55:37","yyyymmdd hh:mm:ss");
OK
1484726137
Time taken: 0.166 seconds, Fetched: 1 row(s)

6.于是百度了下其他博友写的博客仔细核对了时间格式发现在年月日中的月mm应该写成MM,修改结果再次运行没有问题

http://s13/mw690/003d54oKzy7gFYnHtNi3c&690unix_timestamp格式说明" TITLE="hive unix_timestamp格式说明" />

注:在使用unix_timestamp函数时千万注意月份的格式是大写MM,否则计算出的结果有影响。

目前不知道小写mm的月份代表什么,测试的时候不管月份是什么,小写mm的结果都是01月份;

在继续研究中发现了函数是根据格式符取年月日时分秒的值,没有对应时间上的匹配符就含有默认的值。总结如下:
。没有对应的格式符,含有默认值。年份(yyyy)-----1970年;月份(MM)----》01;日(dd)---》01;时---》00;分---》00;秒---》00



http://s14/mw690/003d54oKzy7gKm9hsMBfd&690unix_timestamp格式说明" TITLE="hive unix_timestamp格式说明" />

图一
。对应的格式符含有多个,解析最后一个,例如:"2017-12-20 12:20:03 yyyy-MM-dd hh:mm:hh",即hh有2个值,12、03,而ss没有默认为0,最后得到的结果是2017-12-20 03:20:00

。月日时分秒对应的字符大于2且连续,将对应字符的值做为整体解析。例如"20171220 122003 yyyy-MM-dd hh:hh:ss",即hh:hh连续在一起,任务12和20合并一起为1220小时,然后将1220h/24=50天20小时,即将20171220+50天=20180208,剩余的20小时作为时,mm没有格式符,即00,结果为:2018-02-28 20:00:03

http://s4/mw690/003d54oKzy7gKm9jzdVa3&690unix_timestamp格式说明" TITLE="hive unix_timestamp格式说明" />

图2

。 年份格式符若写yy时的解析为:yy>37 =》 19yy年;yy<37 =》20yy年,例如"171220 132003, yyyyMMdd hh:mm:ss"=》2017-12-20 13:20:03 
 "471220 132003, yyyyMMdd hh:mm:ss"=》1947-12-20 13:20:03 
unix时间的定义见相关博客:http://jm.ncxyol.com/post-88.html
http://s7/mw690/003d54oKzy7gKm9nfF4c6&690unix_timestamp格式说明" TITLE="hive unix_timestamp格式说明" />

图3
技术扩展:hive更多函数请参考官网地址https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有