我在Hive中有一个表,显示我们系统的每个用户(user_id)的登录时间(connect_date)。这是表结构:
hive> describe access_log;
OK
user_id double from deserializer
connect_date timestamp from deserializer
ip string from deserializer
logout_date timestamp from deserializer
session_id string from deserializer
我的目标是找到特定时间段内每个用户登录之间的平均时间,让我们使用过去7天来解决此问题。
Hive Query如何实现对数据的分析?感谢。
答案 0 :(得分:2)
有几种方法可以做到这一点:
1)您可以将connect_dates聚合到一个数组中并编写一个UDF来将日期/时间戳数组解析为平均时间。
2)您可以使用hive 0.12中引入的窗口函数 - 这更简单
select
user_id, avg(connect_date-lag_connect_date)
from
(
select
user_id, connect_date, lag(connect_date) over (partition by user_id order by connect_date) as lag_connect_date
from
access_log
) a
group by
user_id