Разница между двумя временными метками в Hive по запросу - PullRequest
0 голосов
/ 28 июня 2018

У меня есть таблица улья со следующими столбцами

    session     Timestamp
    1           2018-05-18T00:00:00.000Z
    1           2018-05-18T00:01:00.000Z
    1           2018-05-18T00:02:00.000Z
    1           2018-05-18T00:03:00.000Z
    2           2018-05-18T00:05:00.000Z
    2           2018-05-18T00:10:00.000Z
    2           2018-05-18T00:15:00.000Z

Для каждой сессии я хочу найти разницу между первой и последней отметками времени в секундах

Следовательно, мой вывод будет таким

    session     Period
    1           180
    2           600

1-е отличие, 180 (seconds) = 2018-05-18T00:03:00.000Z - 2018-05-18T00:00:00.000Z

2-е отличие, 600 (seconds) = 2018-05-18T00:15:00.000Z - 2018-05-18T00:05:00.000Z

И сессия, и отметка времени находятся в строке.

Я пытаюсь преобразовать метку времени строки в метку времени Unix с помощью этой команды, однако я не удалась

    select from_unixtime(unix_timestamp(Timestamp, "yyyy-MM-dd'T'HH:mm:ss.SSSZ")) AS NEW_TIMESTAMP from TBL;

1 Ответ

0 голосов
/ 29 июня 2018

unix_timestamp преобразует строку в метку времени (секунды), поэтому вам просто нужно использовать эту функцию и вычесть мин из максимума:

select 
max(unix_timestamp(Timestamp, "yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
-
min(unix_timestamp(Timestamp, "yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
from TBL
group by session_id

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

...