有一个线上服务器接口访问日志表,有访问时间,访问接口,和用户的ip,求11月9号下午14-15点,访问/api/user/login接口的top10的IP地址,用hive中的rownumber和log
时间: 2024-02-15 10:02:53 浏览: 128
web服务器的访问日志access.log
3星 · 编辑精心推荐
可以使用Hive SQL的ROW_NUMBER()函数和子查询来实现:
```
SELECT ip, count
FROM (
SELECT ip, COUNT(*) AS count,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) AS rank
FROM access_logs
WHERE api='/api/user/login'
AND dt='20211109'
AND hour=14
AND minute>=0
AND minute<60
GROUP BY ip
) sub
WHERE rank <= 10;
```
其中,`access_logs`是日志表名,`dt`字段为日期,格式为YYYYMMDD,`hour`字段为小时,`minute`字段为分钟,`api`字段为接口名称,`ip`字段为用户IP地址。上述语句查询的是2021年11月9日下午14:00至15:00之间访问`/api/user/login`接口的top10的IP地址,按访问次数降序排列。首先在子查询中使用`COUNT()`函数计算每个IP地址的访问次数,并使用`ROW_NUMBER()`函数进行排名,然后在外部查询中筛选出排名前10的IP地址。
阅读全文