HIVE SQL 计算留存率 思路

本文介绍如何使用HIVE SQL计算每日访问用户的留存率。首先,通过基础表获取每日访问用户ID,然后计算历史访问用户在昨日的留存数作为关键步骤。接着,利用动态分区对历史日期进行汇总,进一步分析留存数。
摘要由CSDN通过智能技术生成

问题

计算每日访问用户 在之后日期的留存数

基础表 每日访问用户ID
create external table if not exists user_visit_date (
  user_id bigint comment '用户ID'
)
comment '每日访问用户'
partitioned by (p_day date comment '分区日期')
stored as parquet;

解决思考

Step 1. 先算出历史访问用户 在昨日的 留存数 (关键思路)
create external table if not exists user_before_visit_date (
  before_visit_date date comment '历史访问日期',
  remain_count bigint comment '在visit_date留存人数'
) comment 
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
留存率是指在一定时间范围内,用户在某个时间点后仍然使用产品或服务的比例。计算留存率可以使用Hive SQL或Spark SQL。 假设我们要计算某个应用程序在第一天、第七天和第三十天的留存率。我们可以按照以下步骤进行计算: 1. 首先,我们需要从用户行为日志中提取出每个用户的第一次使用时间。假设我们已经将这些数据存储在一个名为user_first_use的Hive表中,其中包含用户ID和第一次使用时间。 2. 接下来,我们需要计算每个用户在第一天、第七天和第三十天后是否仍然使用了应用程序。假设我们已经将这些数据存储在一个名为user_activity的Hive表中,其中包含用户ID、活动日期和活动类型(例如,打开应用程序、浏览页面等)。 3. 然后,我们可以使用Hive或Spark SQL编写查询来计算留存率。以下是一个使用Hive SQL计算留存率的示例查询: ``` SELECT COUNT(DISTINCT ua.user_id) AS total_users, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 0 THEN ua.user_id END) AS day1_retention, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 6 THEN ua.user_id END) AS day7_retention, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 29 THEN ua.user_id END) AS day30_retention FROM user_first_use uf JOIN user_activity ua ON uf.user_id = ua.user_id WHERE ua.activity_date BETWEEN uf.first_use_date AND DATE_ADD(uf.first_use_date, 29) ``` 这个查询将返回四个值:总用户数、第一天留存率、第七天留存率和第三十天留存率。我们使用COUNT(DISTINCT)函数来计算唯一用户的数量,并使用CASE语句来计算在特定日期范围内仍然使用应用程序的用户数量。DATEDIFF函数用于计算用户第一次使用应用程序后的天数。 4. 如果使用Spark SQL,可以使用类似的查询来计算留存率。以下是一个使用Spark SQL计算留存率的示例查询: ``` SELECT COUNT(DISTINCT ua.user_id) AS total_users, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 0 THEN ua.user_id END) AS day1_retention, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 6 THEN ua.user_id END) AS day7_retention, COUNT(DISTINCT CASE WHEN DATEDIFF(ua.activity_date, uf.first_use_date) = 29 THEN ua.user_id END) AS day30_retention FROM user_first_use uf JOIN user_activity ua ON uf.user_id = ua.user_id WHERE ua.activity_date BETWEEN uf.first_use_date AND DATE_ADD(uf.first_use_date, 29) ``` 这个查询与Hive SQL查询非常相似,只是使用了Spark SQL的语法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值