HIVE - 时差格式

时间:2016-09-01 07:03:37

标签: hadoop time hive

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

以下是一个例子:1464740049000

如何转换时差并以小时为单位格式化。

我尝试了一些像datediff和/或timestamp(event1) - timestamp(event2)。

我想要的是

  

选择时间戳(e1.time),时间戳(e2.time),e1.time-e2.time为   来自testdata的Time_Diff;

Time_Diff应格式化为小时,分钟,秒...... 我怎么能得到这个? 提前致谢 彼得

2 个答案:

答案 0 :(得分:0)

如果您对仅限小时感兴趣,而不是将unixtimestamp转换为时间戳,只需使用SQL数学函数

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

答案 1 :(得分:0)

如果差异小于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                                                                                                                       |
+-------------------------------------------------------------------------------------------------------------------------------------------+