0


Hive SQL面试题-流失回流用户数统计

流失回流用户数统计


根据用户最后一次登录记录表,统计每天的流失(一段时间未登录平台)用户数量,和回流用户(一段时间未登录平台,但今天重新登录了平台)数量。
执行环境:Hive on Spark

1 统计指标

从用户最后一次登录记录表中统计如下指标,当日流失用户数量、当日回流用户数量
统计周期指标说明****最近1日流失用户数之前活跃过的用户,最近一段时间未活跃,就称为流失用户。
此处要求统计7日前(只包含7日前当天)活跃,但最近7日未活跃的用户总数。最近1日回流用户数之前的活跃用户,一段时间未活跃(流失),今日又活跃了,就称为回流用户。
此处要求统计回流用户总数。

2 测试数据

  • 建表
  1. -- user_id: 用户 id
  2. -- last_login_date: 用户上次登录日期
  3. -- dt: 日期分区
  4. create table user_login_log (
  5. user_id string,
  6. last_login_date string,
  7. dt string
  8. );
  • 插入数据
  1. -- 1001 每天登录,普通用户
  2. -- 1002 回流用户,一段时间未登录,然后 2020-06-14 又活跃了
  3. -- 1003 流失用户,从 2020-06-07 之后就没有登录过了
  4. insert into user_login_log values
  5. ('1001', '2020-06-13', '2020-06-13'),
  6. ('1001', '2020-06-14', '2020-06-14'),
  7. ('1002', '2020-06-01', '2020-06-13'),
  8. ('1002', '2020-06-14', '2020-06-14'),
  9. ('1003', '2020-06-07', '2020-06-13'),
  10. ('1003', '2020-06-07', '2020-06-14');
  • 数据样例
  1. select * from user_login_log;

user_idlast_login_datedt10012020-06-132020-06-1310022020-06-012020-06-1310032020-06-072020-06-1310012020-06-142020-06-1410022020-06-142020-06-1410032020-06-072020-06-14

3 实现思路

3.1 流失用户

统计当天(2020-06-14)的流失用户,此类用户特征是上次登录日期距当天日期已经达到 7 天

  1. select '2020-06-14' as dt,
  2. count(*) as user_lost_count
  3. from user_login_log where dt = '2020-06-14'
  4. and last_login_date = date_sub('2020-06-14', 7);

3.2 回流用户

统计当天(2020-06-14)的回流用户,此类用户的特征为当天(2020-06-14)登陆了平台,同时昨天的还属于流失用户,即前一天(2020-06-13)的最后登录日期在7天之前

  • 取出 2020-06-14 登录的用户
  1. select user_id from user_login_log
  2. where dt = '2020-06-14'
  3. and last_login_date = '2020-06-14';
  • 取出 2020-06-13 还属于流失用户的用户
  1. -- 此处 last_login_date <= date_sub('2020-06-14', 8)
  2. -- 表示前一天 date_sub('2020-06-14', 1) 处在流失状态的用户
  3. select user_id from user_login_log
  4. where dt = date_sub('2020-06-14', 1)
  5. and last_login_date <= date_sub('2020-06-14', 8);
  • 将两份数据 join 起来获得流失用户数
  1. with t1 as (
  2. select user_id from user_login_log
  3. where dt = '2020-06-14'
  4. and last_login_date = '2020-06-14'
  5. ),t2 as (
  6. select user_id from user_login_log
  7. where dt = date_sub('2020-06-14', 1)
  8. and last_login_date <= date_sub('2020-06-14', 8)
  9. ) select '2020-06-14',count(distinct t1.user_id)
  10. from t1 inner join t2 on t1.user_id = t2.user_id;
标签: hive sql 大数据

本文转载自: https://blog.csdn.net/SUNK2014/article/details/127966069
版权归原作者 孙看看 所有, 如有侵权,请联系我们删除。

“Hive SQL面试题-流失回流用户数统计”的评论:

还没有评论