Разница между двумя отметками времени в Hive через запрос

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

    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;

person Hardik Gupta    schedule 28.06.2018    source источник


Ответы (1)


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

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

person mazelx    schedule 29.06.2018