Hive 通过查询确定配置单元中两个时间戳之间的差异

Hive 通过查询确定配置单元中两个时间戳之间的差异,hive,hiveql,cloudera-cdh,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

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

    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(秒)=2018-05-18T00:03:00.000Z-2018-05-18T00:00:00.000Z

第二个差异,
600(秒)=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;

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