说明:程序有快慢之分,业务却有千变万化之状,不同的需求对症下药,选择合适的解法。

wau:指的是用户一周之内登陆的独立用户id数

wau保留率:指的是后续每周登陆的独立用户id与第一周登陆独立用户id的join,相当于第一周登陆,后续每周也登陆的用户。

需求:

统计从2013七月份开始每周2013-07-01~2013-07-07,2013-07-08~2013-07-14,。。。2013-12-16~2013-12-22,2013-12-23~2013-12-29的wau,
以及相对于第一周7.1-7.7的保留率,累积25周

统计的方法有很多种,在此给出常见的三种解法,以后碰见类似的dau、mau保留率问题都可以借鉴。(写hql就是写MR,以这种思路做统计,总是别有心意)

解法1:稳扎稳打

1、统计每周wau
2、统计每周相对于7.1-7.7的保留率
sql如下:

#第一周wau
hive -e "use acorn_3g;select count(distinct uid) from tmp_user_info where log_date>='2013-07-01' and log_date<='2013-07-07' and uid>0 and type='client';"
#第二周wau
hive -e "use acorn_3g;select count(distinct uid) from tmp_user_info where log_date>='2013-07-08' and log_date<='2013-07-14' and uid>0 and type='client';" 190s
#第二周保留
hive -e "use acorn_3g;select count(distinct t.uid) from (select distinct uid from tmp_user_info where log_date='2013-12-01' and uid>0 and type='client') t join (select distinct uid from tmp_user_info where log_date='2013-12-02' and uid>0 and type='client') m on t.uid=m.uid;" 510s

逻辑清晰,简单明了,如上需要51条sql语句,100多次io迭代,耗时(190+510)*25=17500s

解法2:借助外部力量

1、统计每周的wau用户id

2、借助shell命令,用户id做join

#第一周登陆用户id
select distinct uid from  tmp_user_info where log_date>='2013-07-01' and log_date<='2013-07-07' and uid>0 and type='client'>  0701-0707.txt 180s#第二周登陆用户id
select distinct uid from  tmp_user_info where log_date>='2013-07-08' and log_date<='2013-07-14' and uid>0 and type='client'>  0708-0714.txt#周wau
wc -l 0701-07-07.txt#周保留率,通过comm命令,拿到交集
comm 0701-0707.txt 0708-0714.txt -12| wc -l

借助shell脚本,25条sql语句,25周的数据,通过如上,至少50次的io迭代,耗时180s*25=4500s

解法3:四两拨千斤

1、根据需求,把符合条件的所有用户id生成临时表

2、按周统计wau,wau保留率

#临时表
hive -hiveconf hive.exec.compress.output=true -hiveconf io.seqfile.compression.type=BLOCK -e "use acorn_3g;
create table tmp_xinyan_client_wau as
select cast ((datediff(log_date,'2013-07-01')/7) as int) as week,uid as user_id from tmp_user_info where log_date>='2013-07-01' and log_date<='2013-12-29' and uid>0 and type='client' group by cast ((datediff(log_date,'2013-07-01')/7) as int),uid;"  420s#一次性统计25周wau
hive -e "use acorn_3g;select week,count(1) from  tmp_xinyan_client_wau group by week" > wau.txt  48s#一次性统计25周保留率
hive -e "set hive.mapjoin.smalltable.filesize=250000000;use acorn_3g;select  /* + MAPJOIN(t7)*/ tu.week,count(1) from (select user_id from tmp_xinyan_client_wau where week=0)  t7  join tmp_xinyan_client_wau tu on t7.user_id = tu.user_id group by tu.week;"  360s

如上3条sql语句,3次IO迭代,通过减少io的迭代次数,耗时860s,可以快速完成需求,也为大家偷偷懒,节省时间,记得删除临时表。

关于hive统计周wau、保留率需求的几种思路相关推荐

  1. Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频

    Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cris 文章目录 Cris 小哥哥的大数据项目之 Hive 统计 YouTube 热门视频 Author:Cr ...

  2. 用Hive统计某个年阶段连接夺冠的NBA球队

    用Hive统计某个年阶段连接夺冠的NBA球队 1.原始数据如下:`在这里插入 team,year 活塞,1990 公⽜,1991 公⽜,1992 公⽜,1993 ⽕箭,1994 ⽕箭,1995 公⽜, ...

  3. C语言编程>第五周 ① 目前人民币共有以下几种面值(不包括角和): 1元 2元 5元 10元 20元 50元 100元 编写一个函数计算金额“X“需要多少张面值为n 元的纸币。

    例题:目前人民币共有以下几种面值(不包括角和):1元 2元 5元 10元 20元 50元 100元 编写一个函数计算金额"X"需要多少张面值为n 元的纸币. 代码如下: /*代码分 ...

  4. 用函数统计各分数段人数c语言,如何使用Excel函数统计各分数段的人数(五种方法)...

    如何使用Excel函数统计各分数段的人数(五种方法),对老师很有用哦. Excel教程:妙用Excel五个函数统计学生期末考试分数段 考试结束,老师们都要对学生的考试成绩进行分析.各分数段人数的统计是 ...

  5. 43.Spark大型电商项目-用户访问session分析-top10热门品类之需求回顾以及实现思路分析

    目录 需求回顾 top10热门品类 二次排序 实现思路分析 本篇文章将记录用户访问session分析-top10热门品类之需求回顾以及实现思路分析. 需求回顾 top10热门品类 计算出来通过筛选条件 ...

  6. shell统计每一行字符数的三种方法

    shell统计每一行字符数的三种方法 $cat test.txt SlNAC2 ,SlNAC2_2 ,SlNAC2_2 ##### 方法一: $awk -F "" '{print ...

  7. mysql查询最近一个自然周_自然周与自然月的Hive统计SQL

    按照周或者月统计活跃数: 周: SELECT week, COUNT(DISTINCT pin), business_type FROM ( SELECT DISTINCT user_log_acct ...

  8. Hive项目之谷粒影音:ETL清洗原数据、Hive统计视频观看数top10、视频类别top、视频观看数top其所属类别、类别流量top、类别热度top、上传视频用户数量top、类别视频观看top

    Hive实战之谷粒影音 项目数据下载地址: guiliVideo.zip谷粒影音项目视频表.用户表 包含内容: 两个文件夹 User表中的74702条数据 video表中5张表,每张表中都有多条数据 ...

  9. python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...

    此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...

最新文章

  1. 薛其坤、向涛两位院士,担任这家研究院联合院长
  2. ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂
  3. 编译器扩展SEH(2)
  4. python3字典写入excel_python3:excel操作之读取数据并返回字典 + 写入的案例
  5. 两个链表的第一个公共结点-输入两个链表,找出它们的第一个公共结点。
  6. java mail 503_邮件配置报503错误,发送失败
  7. 架构设计 之 你为啥只垂直切子系统没分层呢?
  8. jquery选择器通配符
  9. 浅学JSON——Json.NET之首次试手
  10. 关于PS中切图的保存
  11. 怎么回滚版本_Win 10 暂停更新及回滚方法
  12. 双子星tv源码_双子星IPTV电视直播管理系统源码安装教程
  13. 防火墙服务器-iptables
  14. 如何使静态图片做成动态效果?怎么让静态图片动起来
  15. java计算机毕业设计民航售票管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  16. 使用echarts图做Drink Flavors图
  17. CSR蓝牙开发资源大全(软件代码资料)
  18. MFC添加afx_msg点击事件
  19. 分享几个去图片水印好用的软件给你
  20. win10找不到打印机_新版Windows 10的外设Bug:重启后找不到USB打印机端口

热门文章

  1. python 接收MQTT间隔一段时间停止问题
  2. 钻石图案JAVA语言
  3. win内置ubuntu安装_win10内置的ubuntu安装在什么位置
  4. 101.为什么我们要学习理论课程?为什么要学习软件工程?(建议在校生必读)
  5. 马尔萨斯人口论与数学模型
  6. 特朗普遭抗议:美国投资人仍看好可再生能源
  7. java通讯录课程设计_java课程设计_通讯录_通讯簿.doc
  8. 红外避障模块c语言编写程序,红外避障模块(红外对管)51单片机驱动源程序
  9. Linux基础命令(持续更新中)
  10. 《土耳其瞭望塔》背后的故事