Hadoop HIVE-时差格式

Hadoop HIVE-时差格式,hadoop,time,hive,Hadoop,Time,Hive,我想计算两个事件之间的差异。这两个事件都以毫秒为单位存储在UNIX_时间戳中 这里有一个例子:146474049000 如何将时差转换为小时格式 我尝试了几种方法,比如datediff和/或timestamp(event1)-timestamp(event2) 我想要的是 选择timestamp(e1.time)、timestamp(e2.time)、e1.time-e2.time作为 与测试数据的时间差 时间差的格式应为小时、分钟、秒。。。 我怎么能得到这个? 提前谢谢 Peter如果您只对小

我想计算两个事件之间的差异。这两个事件都以毫秒为单位存储在UNIX_时间戳中

这里有一个例子:146474049000

如何将时差转换为小时格式

我尝试了几种方法,比如datediff和/或timestamp(event1)-timestamp(event2)

我想要的是

选择timestamp(e1.time)、timestamp(e2.time)、e1.time-e2.time作为 与测试数据的时间差

时间差的格式应为小时、分钟、秒。。。 我怎么能得到这个? 提前谢谢
Peter

如果您只对小时感兴趣,那么不要将UnixtTimeStamp转换为时间戳,只需使用SQL数学函数即可

select (time2 - time1)/(1000 * 60 * 60) as hours from mytable; 

如果差异小于24小时,您可以使用以下方法:

[localhost:21000] > select from_unixtime(1392394861 - 1392394860, 'HH:mm:ss');
+----------------------------------------------------+
| from_unixtime(1392394861 - 1392394860, 'hh:mm:ss') |
+----------------------------------------------------+
| 00:00:01                                           |
+----------------------------------------------------+
如果差异可能超过24小时,以下相当难看的表达将起作用:

[localhost:21000] > select concat(cast(floor((1392394861 - 1392300000)/60/60) as string), from_unixtime(1392394861 - 1392300000, ':mm:ss'));
+----------------------------------------------------------------------------------------------------------------------+
| concat(cast(floor((1392394861 - 1392300000) / 60 / 60) as string), from_unixtime(1392394861 - 1392300000, ':mm:ss')) |
+----------------------------------------------------------------------------------------------------------------------+
| 26:21:01                                                                                                             |
+----------------------------------------------------------------------------------------------------------------------+
或者,如果您更喜欢带有明确日期的格式:

[localhost:21000] > select concat(cast(floor((1392394861 - 1392300000)/60/60/24) as string), " days and ", from_unixtime(1392394861 - 1392300000, 'HH:mm:ss'));
+-------------------------------------------------------------------------------------------------------------------------------------------+
| concat(cast(floor((1392394861 - 1392300000) / 60 / 60 / 24) as string), ' days and ', from_unixtime(1392394861 - 1392300000, 'hh:mm:ss')) |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| 1 days and 02:21:01                                                                                                                       |
+-------------------------------------------------------------------------------------------------------------------------------------------+
“丑陋的表情”很好用!这应该是公认的答案。