桑基流向图 - HiveSQL准备

本文探讨了在老工厂和新工厂环境中,如何使用HiveSQL进行桑基流向图的分析。针对老工厂,重点在于通过left join找出“上半月活跃下半月不活跃”的用户。而在新工厂中,由于数据结构变化,需要调整逻辑,避免因上周和本周使用相同app导致的用户流失计算错误。新工厂写法1和2分别展示了不同的解决方案,其中新工厂写法2被认为是正确的。
摘要由CSDN通过智能技术生成

老工厂

由于老工厂的app表是每日全量表,因此才有app_type1和app_type2,将“上半月活跃下半月不活跃”,和
“上半月不活跃下半月活跃”分开来写,因为app_type1和app_type2中,都有全量的imei,所以可以用left jpin where t2.imei is null 的方式,找到“上半月活跃下半月不活跃”的用户,反之同理。

而且,app_type1为了找到“上半月活跃下半月不活跃”的使用了某app的用户,注意这里是两个维度,既要是同一个用户,也要是对于同一个app而言。我之前没有针对 t1.appname = t2.appname,就会变成“上半月活跃下半月不活跃”的用户,那么app_type1和app_type2以join,肯定就啥都没有了
(“上半月活跃下半月不活跃”的用户) join (“下半月活跃上半月不活跃”的用户),正好是null。

-- app流入流出的定义:app1在[-32,-16]活跃 >= 1次,app2不活跃;app1在[-15,0]不活跃 ,app2活跃 >= 2次

-- 上半月活跃
-- 一个imei对应多个app
with period_table1 as (
select
imeimd5,appname,apppackage,tag,active_counts
from (
select appname,apppackage,tag
from miui.long_short_video_lists) app_list
inner join
(
select imeimd5,pkgname,
count(distinct from_unixtime(usageTime, 'yyyyMMdd')) as active_counts
from miui_data.miui_app_middletier_new
lateral view explode(usageDataMap) t as pkgname,act_value
lateral view explode(act_value.recentUsageReportDataMap) r as usageTime,usage
where
from_unixtime(usageTime, 'yyyyMMdd') >= ${date-33}
and from_unixtime(usageTime, 'yyyyMMdd') <= ${date-17}
and date = ${date-1}
and userId = '0'
AND finalCountry = "CN"
group by imeimd5,pkgname
) period1
on app_list.apppackage = period1.pkgname
),

-- 下半月活跃
period_table2 as (
select
imeimd5,appname,apppackage,tag,active_counts
from (
select appname,apppackage,tag
from miui.long_short_video_lists) app_list
inner join
(select imeimd5,pkgname,
count(distinct from_unixtime(usageTime, 'yyyyMMdd')) as active_counts
from miui_data.miui_app_middletier_new
lateral view explode
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值