当前位置: 首页 > news >正文

大数据_SQL_5min访问达到100次的用户

某公司网站每日访问量达到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_time,'home2' as page union all select 1 as uid,1723124177 as visit_time,'home2' as page union all select 1 as uid,1723124277 as visit_time,'home2' as page union all select 2 as uid,1723124277 as visit_time,'home2' as page union allselect 2 as uid,1723125277 as visit_time,'home2' as page 
)-- select 
--     uid,
--     visit_time,
--     page,
--     lag(visit_time,3,0) over(partition by uid order by visit_time) as before_3_time
-- from tmpa select uid
from 
(select uid,visit_time,page,lag(visit_time,3,0) over(partition by uid order by visit_time) as before_3_timefrom tmpa 
) t1 
where (visit_time - before_3_time) <= 300
group by uid 

函数LAG说明

lag(<expr>[, bigint <offset>[, <default>]]) over([partition_clause] orderby_clause)

命令说明

返回当前行往前(朝分区头部方向)第offset行数据对应的表达式expr的值。表达式expr可以是列、列运算或者函数运算等。

参数说明

  • expr:必填。待计算返回结果的表达式。

  • offset:可选。偏移量,BIGINT类型常量,取值大于等于0。值为0时表示当前行,为1时表示前一行,以此类推。默认值为1。输入值为STRING类型、DOUBLE类型则隐式转换为BIGINT类型后进行运算。

  • default:可选。当offset指定的范围越界时的缺省值,常量,默认值为NULL。需要与expr对应的数据类型相同。如果expr非常量,则基于当前行进行求值。

  • partition_clause及orderby_clause:详情请参见windowing_definition。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DataLoader 的基本用法
  • go post请求,参数是raw json格式,response是固定结构。
  • 编程-设计模式 10:外观模式
  • 获取客户端真实IP
  • 以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展
  • LSPosed模块开发第一篇
  • Summernote 富文本编辑器的内容变成只读模式
  • 开源免费的wiki知识库
  • 服务器虚拟内存是什么?虚拟内存怎么设置?
  • 驰骋BPM RunSQL_Init SQL注入漏洞复现
  • 通过数组中元素或者key将数组拆分归类成新的二维数组
  • 轩轩游桂林
  • MySql-MySqlConnector
  • docker 部署 mysql8
  • 设计模式-单一职责模式
  • JavaScript-如何实现克隆(clone)函数
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CentOS从零开始部署Nodejs项目
  • Druid 在有赞的实践
  • Java IO学习笔记一
  • React中的“虫洞”——Context
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 浅谈web中前端模板引擎的使用
  • 山寨一个 Promise
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 事件委托的小应用
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 学习JavaScript数据结构与算法 — 树
  • AI算硅基生命吗,为什么?
  • FaaS 的简单实践
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # 达梦数据库知识点
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #职场发展#其他
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (苍穹外卖)day03菜品管理
  • (二)pulsar安装在独立的docker中,python测试
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一)kafka实战——kafka源码编译启动
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core 发展历程和版本迭代
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • .NET导入Excel数据
  • .Net实现SCrypt Hash加密