2016-09-01 4 views
0

Я хочу рассчитать разницу между событиями. Оба события хранятся в UNIX_TIMESTAMP в миллисекундах.HIVE - Формат разницы во времени

Вот пример: 1464740049000

Как я могу преобразовать разницу во времени и форматировать их в часах.

Я пробовал несколько вещей, таких как dateiff и/или timestamp (event1) - отметка времени (event2).

То, что я хочу

выберите метка времени (e1.time), метка времени (e2.time), e1.time-e2.time в Time_Diff от Testdata;

Time_Diff должен быть отформатирован в часах, минутах, секундах ... Как это получить? Заранее спасибо Peter

ответ

0

Если вы заинтересованы в час только, вместо преобразования unixtimestamp в метку времени, просто использовать SQL Математические функции

select (time2 - time1)/(1000 * 60 * 60) as hours from mytable; 
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                              | 
+-------------------------------------------------------------------------------------------------------------------------------------------+ 
Смежные вопросы