hive使用窗口函数实现n分位数据分析

hive使用窗口函数实现n分位数据分析

hive使用窗口函数实现n分位

实际工作中,我们可能会遇到需要获取高质量的用户、主播或者大R的白名单来进行标签输入或者精准推送促活之类的需求以下以主播中用户观看时长为例

背景

主播对应观看时长折线图
图片说明:

  • 横轴: 主播号
  • 纵轴: 主播当天用户观看总时长

从上图我们可以得出结论,存在一批长尾用户,也就是观看时长很低的用户有很多个,然后我们的目标是为了筛选出拥有高观看时长的主播,那么我们可以再对明细数据进行处理(明细数据列为: 主播anchor, 观看时长timelong)结果如下,我们可以通过设置百分位来获取高指标的直播,然后进行标签标识或者推荐
在这里插入图片描述

hivesql实现

-- 获取一周的数据,以主播为维度进行聚合,获取一周内最大观看时长的主播,使用sum窗口函数进行累加排序,获取累加值到达百分之75之前的主播,最后使用concat,collect_set形成主播簇
select
    '高观看' as tag
	,level2
	,concat_ws(',',collect_set(cast(anchor as string))) as anchors
from
(
select
	level2
	, anchor
	-- 获取topN
	, row_number() over(partition by level2 order by timelong desc) rn
	, count(anchor) over(partition by level2) anchor_num 
	, timelong 
	-- 降序累加观看时长
	, sum(timelong) over(partition by level2 order by timelong desc) as timelong_acm
	-- 获取观看总时长进行可以进行比例获取
	, sum(timelong) over(partition by level2) as level_all_timelong
from
(
	select
		anchor
		,if(level2 in ('内部投放-应用宝', '应用宝微下载'), '应用宝', level2) as level2
		,max(timelong) as timelong
	from
		app::t_level_chat_timelong_new
	where ftime between date_sub(${YYYYMMDD}, 6) and ${YYYYMMDD}
	    and level2 in ('ASO推广'
                      ,'iOS'
                      ,'QQ直播公众号'
                      ,'内部投放-应用宝'
                      ,'应用宝微下载'
                      ,'应用市场-OPPO'
                      ,'应用市场-Vivo'
                      ,'应用市场-华为'
                      ,'应用市场-小米应用')
	group by anchor,if(level2 in ('内部投放-应用宝', '应用宝微下载'), '应用宝', level2)
) a
)t where timelong > 30 and timelong_acm <= level_all_timelong * 0.75
group by level2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值