hive统计页面停留时间

Hive中生成连续的天,小时,分钟的HQL写法 ---生成连续的天 select date_add(start_date,pos) as dt from ( select '2021-10-01' as start_date ,'2021-10-15' as end_date )t lateral view posexplode(split(repeat(',',datediff(end_date,start_date)),',')) tab as pos,val ; ---生成连续的小时 select from_unixtime(t1 阅读详情

1、背景:通过业务埋点数据,统计用户在页面的停留时间

样例数据,样例数据存入表tmp,

有如下字段用户uid、动作时间戳time、页面名称pn、动作名称action

SELECT '12345' AS uid, '1695613731020' AS time, '搜索' AS pn, 'click' AS action
UNION ALL
SELECT '12345' AS uid, '1695613732021' AS time, '搜索' AS pn, 'click' AS action
UNION ALL
SELECT '12345' AS uid, '1695613734024' AS time, '搜索' AS pn, 'click' AS action
UNION ALL
SELECT '12345' AS uid, '1695613737036' AS time, '列表' AS pn, 'click' AS action
UNION ALL
SELECT '12345' AS uid, '1695613738037' AS time, '列表' AS pn, 'click' AS action
UNION ALL
SELECT '12345' AS uid, '1695613740040' AS time, '列表' AS pn, 'click' AS action
uidtimepnaction
123451695613731020搜索click
123451695613732021搜索click
123451695613734024搜索click
123451695613737036列表click
123451695613738037列表click
123451695613740040列表click

思路:以用户维度按时间进行升序排列,通过lag函数找到上一个时间动作last_pn

SELECT uid, time, pn, row_number() OVER (PARTITION BY uid ORDER BY time DESC) AS rn
	, lag(pn, 1) OVER (PARTITION BY uid ORDER BY time ASC) AS last_pn
FROM tmp

rn排序的作用是找到最后一个动作

uidtimepnrnlast_pn
123451695613731020搜索6
123451695613732021搜索5搜索
123451695613734024搜索4搜索
123451695613737036列表3搜索
123451695613738037列表2列表
123451695613740040列表1列表

然后将发生页面变化的节点进行标记,

SELECT *, if(pn <> nvl(last_pn, '空') OR rn = 1, 1, 0) AS label
FROM (
SELECT uid, time, pn, row_number() OVER (PARTITION BY uid ORDER BY time DESC) AS rn
, lag(pn, 1) OVER (PARTITION BY uid ORDER BY time ASC) AS last_pn
FROM tmp
) t
uidtimepnrnlast_pnlabel
123451695613731020搜索61
123451695613732021搜索5搜索0
123451695613734024搜索4搜索0
123451695613737036列表3搜索1
123451695613738037列表2列表0
123451695613740040列表1列表1

之后统计停留时间就可以只看label =1的日志之间的时间差即可,全部代码如下,

WITH tmp AS (
		SELECT '12345' AS uid, '1695613731020' AS time, '搜索' AS pn, 'click' AS action
		UNION ALL
		SELECT '12345' AS uid, '1695613732021' AS time, '搜索' AS pn, 'click' AS action
		UNION ALL
		SELECT '12345' AS uid, '1695613734024' AS time, '搜索' AS pn, 'click' AS action
		UNION ALL
		SELECT '12345' AS uid, '1695613737036' AS time, '列表' AS pn, 'click' AS action
		UNION ALL
		SELECT '12345' AS uid, '1695613738037' AS time, '列表' AS pn, 'click' AS action
		UNION ALL
		SELECT '12345' AS uid, '1695613740040' AS time, '列表' AS pn, 'click' AS action
	)
SELECT *
FROM (
	SELECT uid, pn, time, CAST((lead(time, 1) OVER (PARTITION BY uid ORDER BY time ASC) - time) / 1000 AS BIGINT) AS stay_time
	FROM (
		SELECT *
			, if(pn <> nvl(last_pn, '空')
				OR rn = 1, 1, 0) AS label
		FROM (
			SELECT uid, time, pn, row_number() OVER (PARTITION BY uid ORDER BY time DESC) AS rn
				, lag(pn, 1) OVER (PARTITION BY uid ORDER BY time ASC) AS last_pn
			FROM tmp
		) t
	) tt
	WHERE label = 1
) ttt
WHERE stay_time IS NOT NULL

最终统计结果如下

uidpntimestay_time
12345搜索16956137310206
12345列表16956137370363
hive实现网站用户行为分析指标 字段解释accessDate     //访问时间,精确到日期,String格式accessTime   //访问时间,精确到毫秒,int格式accessHour   //访问小时,区间为0-23,int格式 requestMethod   //请求方式(get post 统计的时候没用到),String格式requestProtocal   //请求协议(http https,统计... 阅读详情

相关推荐

用户浏览日志行为分析实例

用户浏览日志行为分析 用户在浏览网页过程中,在t1时刻,用户点进了p1页面,过一段时间后,用户又点进了p2页面,如此反复。 要求:统计用户在每个特定网页的停留时间 或是某个网页用户停留的总时间 步骤: 1、准备用户浏览日志数据 (user_log.txt: userid,log_time,log_url) ,并放置在一个目录下 2、在hive中创建存储用户浏览数据的数据表 3、将数据文件加载...

恋战雪 4036

头条3面:如何精确统计页面停留时长?

作者:今日头条技术来源:https://urlify.cn/2Yfyqe 1、背景页面停留时间(Time on Page)简称 Tp,是网站分析中很常见的一个指标,用于反映用户在某些页...

Java和Android架构 1111

记录用户停留时间

花了很长时间终于把这个功能做出来了,跟大家分享下。用的是jquery。 有两个页面action.aspx和action_to_sql.aspx

用Hive分析函数lead计算用户页面的停留时长

Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的。 Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。这种操作可以 代替表的自联接,并且LAG和LEAD有更高的效率,其中over()表示当前查询的结果集对象,括号里面的语句则表示对这个结果集进行处理。 场景描述: 用户Peter在浏览网页,在某个时刻,Peter点进了某个页面,过一段时间后,Peter又进入了另外一个页面,如此反复,那怎么去统计P.

u011250186的博客 803

采用JavaScript统计用户在网页的停留时间代码

采用JavaScript统计用户在网页的停留时间代码,简单易懂

ZYNQ程序固化实战:从BOOT.bin生成到QSPI/SD卡双启动模式详解

本文详细解析了ZYNQ 7000系列程序固化的完整流程,重点解决了程序断电丢失问题。通过实战演示,从生成BOOT.bin文件到配置QSPI与SD卡双启动模式,逐步指导开发者实现程序在外部存储中的永久驻留,确保产品脱离调试器独立运行。

weixin_29193259的博客 517

SQL面试题练习 —— 最后一次登录停留时长

题目来源:腾讯微信。

hu_wei123的博客 764

电动汽车整车控制器 UDS诊断功能开发调试优化方法

摘要:通过某电动汽车VCU开发过程中,UDS诊断功能的调试,发现一些测试中存在的问题,比如覆盖度不够、效率低下等,提出了相应的优化方法,并经过测试验证其可行性,此方法亦可推广应用至BMS、HCM等其他控制器的UDS诊断开发调试过程中。希望能给相关技术人员带来参考和帮助。

qq_43011586的博客 2142

怎样统计用户在当前页面停留的时间

页面停留时间(Time on Page)简称 Tp,是网站分析中很常见的一个指标,用于反映用户在某些页面上停留时间的长短,传统的Tp统计方法会存在一定的统计盲区,比如无法监控单页应用,没有考虑用户切换Tab、最小化窗口等操作场景。基于上述背景,重新调研和实现了精确统计页面停留时长的方案,需要 兼容单页应用和多页应用,并且不耦合或入侵业务代码。 虽然百度统计之类的也可以记录用户的浏览行为,但是这类统计是全部跟踪用户,而无法精确的跟踪到注册的用户之前一系列的行为,而我们只需要针对注册用户进行有目的性的行为分析。

weixin_45731450的博客 6451

在Ubuntu 22.04上从零搭建TrinityCore 3.3.5服务器:一份保姆级避坑指南

本文详细介绍了在Ubuntu 22.04系统上从零搭建TrinityCore 3.3.5服务器的完整流程,包括环境准备、源码编译、数据库配置、资源文件处理及性能调优等关键步骤。特别针对国内开发者和低配置用户优化,提供保姆级避坑指南,帮助用户高效搭建魔兽世界经典旧世版本私服。

weixin_33393017的博客 304

集成学习综述—bagging/随机森林/adaboost/GBDT/XGBoost/LightGBM/catboost 原理和代码介绍

集成学习介绍 文章目录集成学习介绍1 基本概念1.1 定义基本定义集成学习类别参考链接1.2 基学习器(CART)介绍公式介绍例子讲解代码实践参考链接1.3 偏差(bias)和方差(var)公式推导图解参考链接2 Boosting类2.1 原理2.2 AdaBoost2.2.2 公式推导2.2.3 优点与不足优点不足应用2.2.4 代码实践2.2.5 参考链接2.3 GBDT原理介绍代码实践参考...

fzl的博客 4616

hive_取两次记录的时间差lead/lag/first_value/last_value函数使用 及用户在各个页面停留时间计算示例

这几个函数不支持WINDOW子句 1) LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值 -- 第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL) 2)LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 -- 第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL) 3)FIRST_V...

Mr.pan felix的专栏 2402

SDK报错(1)undefined reference to `f_mount‘

按文中说法是ff.c文件中用了一个if语句来判断是否启用ff.h头文件,但是却没有地方进行宏定义来满足这个if条件。利用SDK读取sd卡时,添加了xilffs库,而且包含了ff.h头文件,还是对fat库的函数报错。网上有的说在ARM v7 gcc linker中添加xilffs的方法可以解决,但我试了没有用。如下图,我们可以在ff.c中自己添加一个宏定义来实现这个条件。最后在赛灵思论坛找到了一个解决方法,原文连接如下。这时候保存编译之后,报错就消失了。ff.c 文件在bsp工程下。

EfunStudy的博客 1481

2001-使用Hive+MR统计分析网站指标

使用Hive+MR统计分析网站指标

艾文 5311

Unity插件——WebView内嵌网页/浏览器插件

一、相关插件: 1、Embedded Browser 插件(文件夹名ZFBrowserUnity) 2、UniWebView插件 3、UnityAndroidWebviewToTexture插件 4、3D WebView for Android插件 二、遇到的问题: 3D WebView显示问题 项目中使用3D WebView存在的问题 三、插件使用 Embedded Browser 加载页面的使用

青岚岁叶的博客 1万+

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

58 Hive案例(访问时长统计)

需求 从web日志中统计每日访客平均停留时间 实现步骤 1、由于要从大量请求中分辨出用户的各次访问,逻辑相对复杂,通过hive直接实现有困难,因此编写一个mr程序来求出访客访问信息(详见代码) 启动mr程序获取结果: [hadoop@hdp-node-01 ~]$ hadoop jar weblog.jar cn.itcast.bigdata.hive.mr.UserStayTime /weblo...

阿甘兄 1068

医学图像分割实战:基于TransUNet训练自己的眼底硬渗出物数据集(附完整代码)

本文详细介绍了基于TransUNet的眼底硬渗出物分割实战指南,涵盖数据预处理、模型调优、训练策略及性能优化等关键环节。通过代码复现和实验对比,展示了TransUNet在医学图像分割中的优势,为糖尿病视网膜病变的早期诊断提供技术支持。

weixin_42524708的博客 363

使用Hive+MR统计分析网站指标

网站用户行为分析背景 数据源来自网站渠道用户行为日志,每天产生10G用户日志。产生的日志的特点: (1)每小时生成一个文件,每个文件约50M,每天每台日志采集服务器产生24个文件 (2)生产环境共有8台日志采集服务器,故每天产生日志:8 * (50*24) 约为10G (3)通过shell脚本,对每天采集服务器上的日志文件进行合并形成一个大约1G的文件,命名格式:日期.log。例如: 2015-...

qq_18219755的博客 1624

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Hive】14-实战案例2——访问时长统计

需求: 从web日志中统计每日访客平均停留时间 实现步骤: 1、由于要从大量请求中分辨出用户的各次访问,逻辑相对复杂,通过hive直接实现有困难,因此编写一个mr程序来求出访客访问信息(详见代码) 启动mr程序获取结果: [hadoop@hdp-node-01 ~]$ hadoop jar weblog.jar bigdata.hive.mr.UserStayTime /webl...

通往神秘的道路的专栏 1490

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间

利用MapReduce框架可实现大规模数据的分布式排序,核心是将数字作为键输出,借助Hadoop的自动排序机制完成排序工作。对于网页停留时间计算,需按用户和会话分组后,通过窗口函数或时间差计算相邻页面的访问间隔。两种场景均体现了大数据处理中"分治+排序"的核心思想,前者直接利用框架特性,后者需结合业务逻辑进行时序分析。关键点包括:确保数据正确分区排序、处理边界情况(如末页停留时间)、优化性能(如使用Combiner或合理设置Reducer数量)。

kngines 2031

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hive SQL窗口函数实现页面统计(以腾云天下页面访问为例)

埋点数据字段为: userid,at,sid,pid分别表示用户id,访问时间,sessionId(区分一次启动),页面id 表名为beacon 所有数据均为模拟数据 2018-07-04 11:46:37 2856 efda26adec1c3eb8 h_01 2018-07-04 11:46:47 2856 efda26adec1c3eb8 h_03 2018-07-04 11:46:...

zhaolq1024的博客 2139

Hive 分析函数lead、lag实例应用

Hive的分析函数又叫窗口函数,在oracle中就有这样的分析函数,主要用来做数据统计分析的。 Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。 这种操作可以代替表的自联接,并且LAG和LEAD有更高的效率,其中over()表示当前查询的结果集对象,括号里面的语句则表示对这个结果集进行处理。

没事看看书 7万+

HTML5停留时长统计,hive计算网页停留时长

hive表结构例如以下:create table pv_user_info(session_id string,user_id string,url string,starttime bigint);主要就是这几个字段实用。省略其它。实现方式:userid和sessionid分组后并按时间降序排序,降序排序后。第一行就是该用户最后一次浏览的网页。最后一行是第一次浏览的网页,第一行的starttim...

weixin_36118143的博客 703
上一篇: mac版sublime安装SqlBeautifier
浅笑古今
博客等级 码龄13年 721粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值