通过查询在Hive中两个时间戳之间的差异

时间:2018-06-28 11:31:42

标签: hive hiveql cloudera-cdh

我有一个包含以下列的配置单元表

    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

第一个区别,180 (seconds) = 2018-05-18T00:03:00.000Z - 2018-05-18T00:00:00.000Z

第二个区别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 :(得分:1)

unix_timestamp将字符串转换为时间戳(秒),因此您只需要使用此函数并从max减去min即可:

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