精华内容
下载资源
问答
  • 连续三周活跃用户:在当前日期之前三周的周活表中,此用户都存在 周活表特点按照mid_id进行了去重 因此如果用户,在连续三周的周活中出现,那么就会有3条对应的记录 周活表:dws_dv_detail_wk monday_date每周1的...

    连续三周活跃用户:在当前日期之前三周的周活表中,此用户都存在
    周活表特点按照mid_id进行了去重
    因此如果用户,在连续三周的周活中出现,那么就会有3条对应的记录

    周活表:dws_dv_detail_wk
    monday_date每周1的记录
    date_sub(nex_day(‘2020-02-18’,‘om’),21)21天之前周所在周的周一
    date_sub(next_day(‘2020-02-18’,‘mo’),1)当前所在周的周末
    思路:
    求当前日期,之前三周的数据。根据mid分组,分组后统计组内记录数量=3即是连续三周登录的用户(当前周往前推两周加上当前周=三周)
    2020-02-18统计日期
    select
    ‘2020-02-18’,
    caoncat(date_sub(nex_day(‘2020-02-18’,‘om’),21),"-",date_sub(next_day(‘2020-02-18’,‘mo’),1))
    count()
    from
    (select
    mid_id
    from dws_dv_detail_wk
    where monday_date between date_sub(next_day(‘2020-02-18’,‘om’),21)
    and ‘2020-02-18’
    group by mid_id
    having count(
    )=3) t1
    在这里插入图片描述

    展开全文
  • 第13章 需求七:最近连续3周活跃用户数 最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次。 13.1 DWS层 使用周活明细表dws_uv_detail_wk作为DWS层数据 13.2 ADS层 1)建表语句 hive ...

    第13章 需求七:最近连续3周活跃用户数
    最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次。
    13.1 DWS层
    使用周活明细表dws_uv_detail_wk作为DWS层数据
    13.2 ADS层
    1)建表语句
    hive (gmall)>
    drop table if exists ads_continuity_wk_count;
    create external table ads_continuity_wk_count(
    dt string COMMENT ‘统计日期,一般用结束周周日日期,如果每天计算一次,可用当天日期’,
    wk_dt string COMMENT ‘持续时间’,
    continuity_count bigint
    )
    row format delimited fields terminated by ‘\t’
    location ‘/warehouse/gmall/ads/ads_continuity_wk_count’;
    2)导入2019-02-20所在周的数据
    hive (gmall)>
    insert into table ads_continuity_wk_count
    select
    ‘2019-02-20’,
    concat(date_add(next_day(‘2019-02-20’,‘MO’),-73),’_’,date_add(next_day(‘2019-02-20’,‘MO’),-1)),
    count(
    )
    from
    (
    select mid_id
    from dws_uv_detail_wk
    where wk_dt>=concat(date_add(next_day(‘2019-02-20’,‘MO’),-73),’_’,date_add(next_day(‘2019-02-20’,‘MO’),-72-1))
    and wk_dt<=concat(date_add(next_day(‘2019-02-20’,‘MO’),-7),’_’,date_add(next_day(‘2019-02-20’,‘MO’),-1))
    group by mid_id
    having count(*)=3
    )t1;
    3)查询
    hive (gmall)> select * from ads_continuity_wk_count;
    13.3 编写脚本
    1)在hadoop102的/home/atguigu/bin目录下创建脚本
    [atguigu@hadoop102 bin]$ vim ads_continuity_wk_log.sh
    在脚本中编写如下内容
    #!/bin/bash

    if [ -n “$1” ];then
    do_date=$1
    else
    do_date=date -d "-1 day" +%F
    fi

    hive=/opt/module/hive/bin/hive
    APP=gmall

    echo “-----------导入日期$do_date-----------”

    sql="
    insert into table “ A P P " . a d s c o n t i n u i t y w k c o u n t s e l e c t ′ APP".ads_continuity_wk_count select ' APP".adscontinuitywkcountselectdo_date’,
    concat(date_add(next_day(‘KaTeX parse error: Expected group after '_' at position 23: …','MO'),-7*3),'_̲',date_add(next…do_date’,‘MO’),-1)),
    count()
    from
    (
    select mid_id
    from " A P P " . d w s u v d e t a i l w k w h e r e w k d t > = c o n c a t ( d a t e a d d ( n e x t d a y ( ′ APP".dws_uv_detail_wk where wk_dt>=concat(date_add(next_day(' APP".dwsuvdetailwkwherewkdt>=concat(dateadd(nextday(do_date’,‘MO’),-7
    3),’’,date_add(next_day(‘ d o d a t e ′ , ′ M O ′ ) , − 7 ∗ 2 − 1 ) ) a n d w k d t < = c o n c a t ( d a t e a d d ( n e x t d a y ( ′ do_date','MO'),-7*2-1)) and wk_dt<=concat(date_add(next_day(' dodate,MO),721))andwkdt<=concat(dateadd(nextday(do_date’,‘MO’),-7),’’,date_add(next_day(’$do_date’,‘MO’),-1))
    group by mid_id
    having count(*)=3
    )t1;”

    h i v e − e " hive -e " hivee"sql"
    2)增加脚本执行权限
    [atguigu@hadoop102 bin]$ chmod 777 ads_continuity_wk_log.sh
    3)脚本使用
    [atguigu@hadoop102 module]$ ads_continuity_wk_log.sh 2019-02-20
    4)查询结果
    hive (gmall)> select * from ads_continuity_wk_count;
    5)脚本执行时间
    企业开发中一般在每周一凌晨30分~1点

    展开全文
  • 网站每天有1亿的访问量,产品提出要统计每个uid的周活跃,目前是日志分析解决的,每天有20G的日志,公司有dip平台会用日志去计算,每次要计算两小时才能处理完。 分析问题 考虑了一下是否可以用redis的bitmap的方式来...

    提出问题

    网站每天有1亿的访问量,产品提出要统计每个uid的周活跃,目前是日志分析解决的,每天有20G的日志,公司有dip平台会用日志去计算,每次要计算两小时才能处理完。

    分析问题

    考虑了一下是否可以用redis的bitmap的方式来做一个统计周活跃的功能

    先简单说下bitmap的原理: 假设有3个同学:

    小明 1小明 2小明 3

    如果有三间房,0是男,女是1,

    房1房2房2
    011

    如果要统计现在班上有几位女生,就可以看到两个1就是两位女生

    在计算机里,一个字节里有8个二进制位,即1byte=8bit 假设有7个数字,我们可以按照编号放进一段连续内存里,对应位置中存在就显示1,其它默认都显示0 比如 3,5,1,7,11,15,4,1 那对应的位置为:

    byte0  0 1 0 1 0 1 0 1
    byte1  0 0 0 1 0 0 0 1
    复制代码

    很明显我们已经方便的对这些数字做了排序了,甚至还做了排重 如果我们要找7是否存在这个数组中,

    只需要7/8 对应到第一个字节byte0中
    7%8对应到第7位上,如果是1就存在,0就不存在。
    复制代码

    如果两亿的数字做排序排重,我们大概要占用好几G的空间,如果用bitmap方式,最少只需要200000000/8/1024/1024 = 24M的空间就够了

    接下来我们看看bitmap在redis上的应用:

    假设这是我们uid的登录情况 0代表未登录,1代表登录

    Monday
    8987129 0
    8298191 1
    8892198 1
    
    Tuesday
    8987129 0
    8298191 0
    8892198 1
    
    Wednesday
    8987129 1
    8298191 1
    8892198 1
    
    Thursday
    8987129 0
    8298191 0
    8892198 0
    
    Friday
    8987129 0
    8298191 1
    8892198 1
    
    Saturday
    8987129 0
    8298191 1
    8892198 0
    
    Sunday
    8987129 1
    8298191 1
    8892198 0
    复制代码

    用setbit方法,将这些数据录入到redis中:

    setbit key offset value
    设置offset对应二进制上的值,返回该位上的旧值
    
    注意:如果offset过大,则会在中间填充0
    &emsp;&emsp;&emsp;offset最大到2^32-1,即可推出最大的字符串为512M
    复制代码
    127.0.0.1:6379> setbit Monday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Monday 8298191 1
    (integer) 0
    127.0.0.1:6379> setbit Monday 8892198 1
    (integer) 0
    127.0.0.1:6379> setbit Tuesday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Tuesday 8298191 0
    (integer) 0
    127.0.0.1:6379> setbit Tuesday 8892198 1
    (integer) 0
    127.0.0.1:6379> setbit Wednesday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Wednesday 8298191 1
    (integer) 0
    127.0.0.1:6379> setbit Wednesday 8892198 1
    (integer) 0
    127.0.0.1:6379> setbit Thursday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Thursday 8298191 0
    (integer) 0
    127.0.0.1:6379> setbit Thursday 8892198 0
    (integer) 0
    127.0.0.1:6379> setbit Friday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Friday 8298191 1
    (integer) 0
    127.0.0.1:6379> setbit Friday 8892198 1
    (integer) 0
    127.0.0.1:6379> setbit Saturday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Saturday 8298191 1
    (integer) 0
    127.0.0.1:6379> setbit Saturday 8892198 0
    (integer) 0
    127.0.0.1:6379> setbit Sunday 8987129 0
    (integer) 0
    127.0.0.1:6379> setbit Sunday 8298191 1
    (integer) 0
    127.0.0.1:6379> setbit Sunday 8892198 0
    (integer) 0
    复制代码

    接下来要计算7天内有登录行为的用户,只需要将周一到周五的值做位或运算就可以了

    补充下位与运算符:

    按位与运算符(&)
    参加运算的两个数据,按二进制位进行“与”运算。
    运算规则:0&0=0;  0&1=0;   1&0=0;    1&1=1;
        即:两位同时为“1”,结果才为“1”,否则为0
          
    按位或运算符(|)
    参加运算的两个对象,按二进制位进行“或”运算。
    运算规则:0|0=0;  0|1=1;  1|0=1;   1|1=1;
        即 :参加运算的两个对象只要有一个为1,其值为1。
         
    异或运算符(^)
    参加运算的两个数据,按二进制位进行“异或”运算。
    运算规则:0^0=0;  0^1=1;  1^0=1;   1^1=0;
    即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
    复制代码

    最后计算7天内登录过的活跃用户:

        127.0.0.1:6379> bitop OR result Monday Tuesday Wednesday Thursday Friday Saturday Sunday
    复制代码
    bitop operation rs key1 [key2..]    
    对key1 key2做opecation并将结果保存在rs上
    opecation可以是AND(与) OR(或) NOT(非) XOR(异或)
    复制代码

                                                         

    这里计算的结果假设3个uid都是连续的话就是 110,其实可能是 ...1.....1....0...... 也就是本周有两个活跃用户登录过。

    就这样,一个上亿访问量的日志统计,在redis的bitmap方式轻松解决。

    展开全文
  • 需求: 上亿个用户,统计一内连续活跃用户 100000000/8/1024/1024 = 11.9M 一个bitmap占用 不到12M 好在一只有7天, 我们用7个key的bitmap来存储状态即可, 加上最后的一个结果res的bitmap: 12*8=100M 内存即可!...
    需求: 上亿个用户,统计一周内连续活跃用户

    100000000/8/1024/1024 = 11.9M 一个bitmap占用 不到12M

    好在一周只有7天, 我们用7个key的bitmap来存储状态即可,

    加上最后的一个结果res的bitmap: 12*8=100M 内存即可!

    遵循下面步骤即可:

    1. 用户编号是前提, 每个用户的编号从1到n(n=就是说的那个上亿的最大值);
    2. 声明7个bitmap, 从周一到周日: mon tue wed thur fri sat sun;
    3. 每个用户编号所在的offset在周1如果登录了, 就是1, 没登录就是0;
    4. 7个bitmap都设值记录;
    5. bitop 对7个bitmap进行位AND操作, 7天都登录的当天的位上才是1
    6. 最后的结果进行bitcount操作, 就是上亿用户一周内连续活动的人数!
    7. 如果想知道连续活跃的用户都有哪些人, 遍历 getbit 每一天的key(mon/tue/...) id即可!

    示例: 我们模拟5个用户吧:

    用户IDmontuewedthurfrisatsun
    0011111111
    0020000011
    0031111111
    0041111111
    0050101

    2.2 前4步: 初始化7个bitmap

    周一的key: mon, 周一所有用户的登录状态记录:

    127.0.0.1:6379> setbit mon 1 1
    (integer) 0
    127.0.0.1:6379> setbit mon 2 0
    (integer) 0
    127.0.0.1:6379> setbit mon 3 1
    (integer) 0
    127.0.0.1:6379> setbit mon 4 1
    (integer) 0
    127.0.0.1:6379> setbit mon 5 0
    (integer) 0

    周二的key: tue, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit tue 1 1
    (integer) 0
    127.0.0.1:6379> setbit tue 2 0
    (integer) 0
    127.0.0.1:6379> setbit tue 3 1
    (integer) 0
    127.0.0.1:6379> setbit tue 4 1
    (integer) 0
    127.0.0.1:6379> setbit tue 5 1
    (integer) 0

    周三的key: wed, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit wed 1 1
    (integer) 0
    127.0.0.1:6379> setbit wed 2 0
    (integer) 0
    127.0.0.1:6379> setbit wed 3 1
    (integer) 0
    127.0.0.1:6379> setbit wed 4 1
    (integer) 0
    127.0.0.1:6379> setbit wed 5 0
    (integer) 0

    周四的key: thur, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit thur 1 1
    (integer) 0
    127.0.0.1:6379> setbit thur 2 0
    (integer) 0
    127.0.0.1:6379> setbit thur 3 1
    (integer) 0
    127.0.0.1:6379> setbit thur 4 1
    (integer) 0
    127.0.0.1:6379> setbit thur 5 1
    (integer) 0

    周五的key: fri, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit fri 1 1
    (integer) 0
    127.0.0.1:6379> setbit fri 2 0
    (integer) 0
    127.0.0.1:6379> setbit fri 3 1
    (integer) 0
    127.0.0.1:6379> setbit fri 4 1
    (integer) 0
    127.0.0.1:6379> setbit fri 5 0
    (integer) 0

    周六的key: sat, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit sat 1 1
    (integer) 0
    127.0.0.1:6379> setbit sat 2 1
    (integer) 0
    127.0.0.1:6379> setbit sat 3 1
    (integer) 0
    127.0.0.1:6379> setbit sat 4 1
    (integer) 0
    127.0.0.1:6379> setbit sat 5 1
    (integer) 0

    周日的key: sun, 所有用户的登录状态记录:

    127.0.0.1:6379> setbit sun 1 1
    (integer) 0
    127.0.0.1:6379> setbit sun 2 1
    (integer) 0
    127.0.0.1:6379> setbit sun 3 1
    (integer) 0
    127.0.0.1:6379> setbit sun 4 1
    (integer) 0
    127.0.0.1:6379> setbit sun 5 1
    (integer) 0

    我去, 数据终于录入完了, 费劲那个~~

    2.3 用bitop对7个bitmap进行位AND操作

    127.0.0.1:6379> bitop and res mon tue wed thur fri sat sun
    (integer) 1

    2.4 bitcount对结果bitmap, 见证奇迹的时刻到了

    127.0.0.1:6379> bitcount res
    (integer) 3

    2.5 想知道连续活跃的用户都有哪些人

    getbit res 1 表示 用户编号为1的结果: 1说明用户ID=1的, 7天都活跃!

    5个用户结果如下:

    127.0.0.1:6379> getbit res 1
    (integer) 1
    127.0.0.1:6379> getbit res 2
    (integer) 0
    127.0.0.1:6379> getbit res 3
    (integer) 1
    127.0.0.1:6379> getbit res 4
    (integer) 1
    127.0.0.1:6379> getbit res 5
    (integer) 0

    2.6 扩展:

    如果需求是: 求一周内活跃过的用户数: 只要将 上面命令中bitop and 改为: bitop or 即可~

    连续 的话要求是AND, 活跃过 的话, 只要有一天就可以

    over!

    2.7 小结

    bitmap的操作命令:

    • setbit key offset value
    • getbit key offset
    • bitcount key [start end]
    • bitop operation destkey [key ...]

      operation: 支持 AND/OR/NOT/XOR四种操作,除NOT 外,其他操作都可接受一个或多个 key 作输入

      destkey: 后面所有 key([key...])的与或非异或操作的结果存入一个目标key, 取个名字!

      key... 可以n个key做 与或非异或操作, 传入这些bitmap的key 列表

    原文链接:https://segmentfault.com/a/1190000023704266

     

    展开全文
  • DAU(日活跃用户数)、WAU(周活跃用户数)MAU(月活跃用户数) 日活跃用户数:当天登陆过一次该网站的用户数量称之为用户活跃数 周活跃和月活跃同理 用户流失率:这个应该是要较长时间来算才有意义,一个月内...
  • 日活跃周活跃月活 日活的定义非常简单,就是今日活跃的用户数,因为定义很简答,所以逻辑很简单,因此它的计算也非常简单。虽然简单,但是它却是我们的业务上非常重要的一个计算指标 日活会受到很多因素的影响,产品...
  • 1. 活跃用户1.1. 基础说明1.1.1. 指标定义活跃用户指的是当前统计时间周期内启动过应用并浏览...1.1.2. 更新周期日活跃数据实时更新,周活跃(WAU)次日更新,月活跃(MAU)次日更新。注意:APP的某些用户可能存在因为网...
  • 活跃用户是什么,活跃用户能传达出什么信息,活跃用户数据能为我的app带来什么价值,看完以下的分析,妈妈再也不用担心我看不懂活跃用户了。 在说明活跃用户之前,有必要先说明Shareinstall对用户的定义是什么——...
  • 企业微信第三方应用上架:在...当应用的周活跃企业数达到30家以上或应用的周活跃人数达到1000人以上,可在“企业微信->工作台->企业微信服务商助手”中联系渠道经理申请应用上架审核。(活跃企业定义:一周内活跃
  • 用户活跃度划分

    千次阅读 2019-02-25 15:40:33
    可分为日活跃率(DAU)、周活跃率(WAU)、月活跃率(MAU)等。 例如周活跃度:一个星期登陆时长均在2小时以上的 活跃期用户:(用户A) 用户活跃路径:新增-活跃-忠诚 对应措施:保证接触频率,但不做促销刺激 沉默期...
  • 研究互联网的同志应该都有听说过DAU(日活跃用户数)、WAU(周活跃用户数)MAU(月活跃用户数),但是具体这些数字是怎么测算的?他们彼此之间又是怎样的关系?在本文中,笔者试图谈谈自己的一些思考,请大家多交流...
  • 友盟为所有DAU曾经达到过1W的App自动开放了“用户构成”(WAU Model)功能,不少开发者...本文为大家详细介绍了“用户构成”指标的使用方法,帮助开发者更清晰的知晓自己App的活跃用户构成,从而更全面地了解A...
  • 【机器人读报】Slack:日活跃用户50万人、6增幅35%造就奇迹   机器学习企业应用SaaS大数据云计算机器人读报 摘要:Slack可能是唯一一款不会时常引发用户暴力倾向的企业应用,相反,它偶尔还会给用户带来...
  • 用户活跃度标签案例

    2021-04-18 16:30:49
    将××天未访问的用户定义为流失用户,将××天内活跃×次的用户定义为高活跃用户 2. 活跃度标签分类 活跃度标签类型有: 高活跃>中活跃>低活跃>流失 3. 构建用户活跃度模型的步骤 Step01.需要确定用户...
  • 活跃用户统计

    2019-07-03 19:16:00
     领导偶然间问起我们的考核系统使用情况如何,最近考虑下做个活跃用户统计功能 二,功能设计  针对性能上要求实时统计,用户名都为8位数字等特点,拟采用redis方案:  使用bitmap,用户登录的同时,将用户所在...
  • 统计活跃用户

    2019-07-07 15:32:00
    客户提出要登录系统的活跃用户,定义如下:an active definition can be one that at least download 5 times in a week. 构思如下:1.首先要循环每个7天的时间段2.找出时间段内登陆超过5次的3.循环插入临时表4.在...
  • 通过对比活跃用户与不活跃用户,观察不活跃用户的特征,分析不活跃的原因,来提升非活跃用户的活跃度。 活跃用户数: 活跃用户数=高质量用户=真正体现产品价值的用户 如:资讯类产品中活跃用户可能是每天...
  • 你真的了解活跃用户吗?

    万次阅读 2018-03-01 10:47:48
    一、活跃用户的定义 活跃用户是什么,活跃用户能传达出什么信息,活跃用户数据能为我的app带来什么价值,看完以下的分析,妈妈再也不用担心我看不懂活跃用户了。 在说明活跃用户之前,有必要先说明友盟对用户的...
  • redis位图法统计活跃用户

    千次阅读 2017-04-07 16:26:47
    redis解决实际问题-----位图法统计活跃用户
  • 今天,我们主要来谈谈如何用Bitmaps来实现统计活跃用户的功能。 什么是 Bitmaps Bitmaps 并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,他们的最大长度是512...
  • sql 日志统计-日、、月活跃

    千次阅读 2017-05-17 15:01:00
    近日网站需求:统计日志表的 日、、月活跃数。最终研究了出来了,分享给大家看下。 如果有更好的sql语句也可以评论下方。 --日活跃量 select CONVERT(varchar(100), cr.AddTime, 23)as addtimt,COUNT(distinct...
  • Redis位图法统计活跃用户
  • 位图法统计活跃用户

    2019-03-19 11:46:07
    Setbit 的实际应用 ...每周评出: 有奖活跃用户: 连续7天活动每月评,等等... 思路: Userid dt active1 2013-07-27 11 2013-0726 1 如果是放在表中, 1:表急剧增大,2:要用group ,sum运算,计算较慢 用: 位图法 ...
  • Redis——位图法统计活跃用户 Redis应用————setbit 位图法统计活跃用户 一亿个用户,用户中有频繁登录的,...如何来查询活跃用户,例如一内登录三次以上的   存储格式? user_id isLogign 1 1 ...
  • 英文全称 MAU(Monthly Active User)[1] ...受统计方式限制,互联网行业使用的月活跃用户数一般指在统计周期(/月)内,启动过该App的用户数。活跃用户数按照用户设备维度进行去重统计,即在统计周期(/...
  • 3、如何来查询活跃用户,【如一内登录三次】 解决思路: 1、用数据库解决 如果用数据库解决,将用户的登录信息都放在表中,这时,数据库的表会急剧增大 同时,要用到group,sum运算,计算较慢,频繁的...
  • 如何来分析活跃用户和留存用户?

    千次阅读 2012-07-09 02:23:25
    活跃用户  用户每天既会不断新增,也会不断流失,如果单独只看每日活跃用户数,是很难发现问题的本质的,所以通常会结合活跃率和整个APP的生命周期来看。 活跃率是指活跃用户/总用户,通过这个比值可以了解你的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,085
精华内容 8,434
关键字:

周活跃用户