某公司网站每日访问量达到10亿级别的访问量,
每次访问记录一条数据,数据包含如下字段:用户ID,访问时间(毫秒级),访问页面。
要求使用hive求出所有在5分钟内访问次数达到100次的用户(求出用户ID即可)
假设存在如下表
table_a
用户id (uid), 访问事件 (visit_time), 访问页面 (page)
解题思路
这道题需要换一个思路求解,不要直接按照题目的思路去做。可以转化为下面这个问题,如果按照时间排序,某条日志之后的第100条日志,与该条日志的时间差在5min之内。
则可以认为5分钟内访问达到100次。
题解
一个简化的例子,5min超过3条,并且认为时间是unix_timestamp(s)
--odps sql
--********************************************************************--
--author:sam
--create time:2024-08-08 21:31:12
--********************************************************************--
-- 用户id (uid), 访问事件 (visit_time), 访问页面 (page)
with tmpa as (
select
1 as uid,
1723123977 as visit_time,
'home' as page
union all
select
1 as uid,
1723124077 as visit_t