精华内容
下载资源
问答
  • 第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 “APP".adscontinuitywkcountselectAPP".ads_continuity_wk_count select 'do_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 "APP".dwsuvdetailwkwherewkdt>=concat(dateadd(nextday(APP".dws_uv_detail_wk where wk_dt>=concat(date_add(next_day('do_date’,‘MO’),-7
    3),’’,date_add(next_day(‘dodate,MO),721))andwkdt<=concat(dateadd(nextday(do_date','MO'),-7*2-1)) and wk_dt<=concat(date_add(next_day('do_date’,‘MO’),-7),’’,date_add(next_day(’$do_date’,‘MO’),-1))
    group by mid_id
    having count(*)=3
    )t1;”

    hivee"hive -e "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
    0 1 1

    如果要统计现在班上有几位女生,就可以看到两个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方式轻松解决。

    展开全文
  • DAU(日活跃用户数)、WAU(周活跃用户数)MAU(月活跃用户数) 日活跃用户数:当天登陆过一次该网站的用户数量称之为用户活跃数 周活跃和月活跃同理 用户流失率:这个应该是要较长时间来算才有意义,一个月内...

    http://blog.sina.com.cn/s/blog_63734d120102wx2w.html

    通过上述原文和询问大佬,得到一个解答

    DAU(日活跃用户数)、WAU(周活跃用户数)MAU(月活跃用户数)

    日活跃用户数:当天登陆过一次该网站的用户数量称之为用户活跃数

    周活跃和月活跃同理

    用户流失率:这个应该是要较长时间来算才有意义,一个月内没有登陆过该网站的用户数量与该网站用户总数量的比例

    转载于:https://www.cnblogs.com/gne-hwz/p/9543981.html

    展开全文
  • 今天是星期五,一个脑细胞耗得很厉害的星期五,今天完成麦肯锡的仪表盘需求,编写一个代码,反复出现错误,反复... ,(a1.W_au_cnt - a2.w_new_finish_cnt) / a3.w_register_pcnt ---老用户活跃占比 FROM (SELECT WEEKOF

    今天是星期五,一个脑细胞耗得很厉害的星期五,今天完成麦肯锡的仪表盘需求,编写一个代码,反复出现错误,反复修改,沙箱和承影反复测试,
    代码保存下

    SELECT a1.Week
      ,a1.City_name
      ,(a1.W_au_cnt - a2.w_new_finish_cnt)           ---老用户当周完单人数
      ,(a1.W_au_cnt - a2.w_new_finish_cnt) / a3.w_register_pcnt  ---老用户活跃占比
    FROM (SELECT WEEKOFYEAR(TO_TIMESTAMP(Stats_date,'yyyyMMdd')) AS Week
        ,City_name
        ,MAX(W_finish_user_cnt) AS W_au_cnt     ---当周完单用户数
      FROM Pub_cockpit_db.Dm_wky_meeting_user_act_ws
      WHERE Stats_date >= from_unixtime(unix_timestamp( date_add(now(),-(dayofweek(now())-2))- interval  8 weeks ),'yyyyMMdd')
      AND  City_name in ('全国','重庆市', '杭州市','长春市','广州市','南京市','武汉市','福州市','成都市','长沙市','郑州市','天津市')
      AND  source=1                                ---t3app
      GROUP BY Stats_date
        ,City_name
      ) a1
    LEFT JOIN 
      (SELECT b1.City_name              AS City_name
        ,MAX(b1.w_new_finish_cnt) AS w_new_finish_cnt      ---当周完单用户数
        ,b1.Week                  AS Week
      FROM (SELECT City_name
          ,SUM(W_new_finish_cnt) AS W_new_finish_cnt
          ,WEEKOFYEAR(TO_TIMESTAMP(Ds,'yyyyMMdd')) AS Week
          ,Ds
        FROM Pub_cockpit_db.Ads_mob_dri_user_gather_ws
        WHERE Ds >= from_unixtime(unix_timestamp( date_add(now(),-(dayofweek(now())-2))- interval  8 weeks ),'yyyyMMdd')
        AND City_name in ('全国','南京市','杭州市','武汉市','长沙市' ,'广州市','天津市','重庆市','长春市','成都市','郑州市','福州市')
        GROUP BY City_name
          ,Week
          ,Ds
        ) b1
      GROUP BY City_name
        ,Week
      ) a2
    ON  a1.Week = a2.Week
    AND  a1.City_name = a2.City_name
    LEFT JOIN 
      (SELECT  c1.week   AS Week                                   
        ,Case
          When c1.Register_city = '500100' Then '重庆市'
          When c1.Register_city = '330100' Then '杭州市'
          When c1.Register_city = '220100' Then '长春市'
          When c1.Register_city = '440100' Then '广州市'
          When c1.Register_city = '320100' Then '南京市'
          When c1.Register_city = '420100' Then '武汉市'
          When c1.Register_city = '350100' Then '福州市'
          When c1.Register_city = '510100' Then '成都市'
          When c1.Register_city = '430100' Then '长沙市'
          When c1.Register_city = '120100' Then '天津市'
          When c1.Register_city = '410100' Then '郑州市'
          When c1.Register_city = '12345678' Then '全国'
          Else '其他' 
        End     
              AS City_name
        ,c1.Passenger_nm        AS w_register_pcnt    
      FROM (SELECT weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))       AS week
          ,Stats_date
          ,Register_city
          ,COUNT(Passenger_uuid)        AS Passenger_nm
        FROM Pub_cockpit_db.Dm_user_basic_char_dt
        WHERE Stats_date >= from_unixtime(unix_timestamp( date_add(now(),-(dayofweek(now())-2))- interval  8 weeks ),'yyyyMMdd')
          AND Register_city   in ('500100' ,'330100' ,'220100' ,'440100' ,'320100' ,'420100' ,'350100','510100' ,'430100' ,'120100' ,'410100')
          AND source = 't3app'
        GROUP BY weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))
          ,Stats_date
          ,Register_city
        UNION ALL
        SELECT weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))       AS week
          ,Stats_date
          ,'12345678'                                           AS Register_city
          ,COUNT(DISTINCT Passenger_uuid)        AS Passenger_nm
        FROM Pub_cockpit_db.Dm_user_basic_char_dt
        WHERE Stats_date >= from_unixtime(unix_timestamp( date_add(now(),-(dayofweek(now())-2))- interval  8 weeks ),'yyyyMMdd')
          AND source = 't3app'    
        GROUP BY weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))
          ,Stats_date
          ,Register_city
        ) c1
      LEFT JOIN  
        (SELECT weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))       AS week
          ,MAX(Stats_date)                                      AS B_Stats_date
        FROM Pub_cockpit_db.Dm_user_basic_char_dt
        WHERE Stats_date >= from_unixtime(unix_timestamp( date_add(now(),-(dayofweek(now())-2))- interval  8 weeks ),'yyyyMMdd')
          AND source = 't3app'    
        GROUP BY weekofyear(to_timestamp(Stats_date,'yyyyMMdd'))
        ) c2
      ON  c1.week = (c2.week +1)
      AND  c1.Stats_date = c2.B_Stats_date
      ) a3
    ON  a1.Week = a3.Week
    AND  a1.City_name = a3.City_name  
    展开全文
  • 您需要连续两个月才能成为活跃用户.我知道用户登录会让用户活跃两个月.好的,您可以通过加入或存在来解决此问题: select year(l.logindate), month(l.logindate), count(distinct l.userid) from logger l where ...
  • 研究互联网的同志应该都有听说过DAU(日活跃用户数)、WAU(周活跃用户数)MAU(月活跃用户数),但是具体这些数字是怎么测算的?他们彼此之间又是怎样的关系?在本文中,笔者试图谈谈自己的一些思考,请大家多交流...
  • 友盟为所有DAU曾经达到过1W的App自动开放了“用户构成”(WAU Model)功能,不少开发者...本文为大家详细介绍了“用户构成”指标的使用方法,帮助开发者更清晰的知晓自己App的活跃用户构成,从而更全面地了解A...
  • 【机器人读报】Slack:日活跃用户50万人、6增幅35%造就奇迹   机器学习企业应用SaaS大数据云计算机器人读报 摘要:Slack可能是唯一一款不会时常引发用户暴力倾向的企业应用,相反,它偶尔还会给用户带来...
  • 用户活跃度划分

    千次阅读 2019-02-25 15:40:33
    可分为日活跃率(DAU)、周活跃率(WAU)、月活跃率(MAU)等。 例如周活跃度:一个星期登陆时长均在2小时以上的 活跃期用户:(用户A) 用户活跃路径:新增-活跃-忠诚 对应措施:保证接触频率,但不做促销刺激 沉默期...
  • Redis——位图法统计活跃用户 Redis应用————setbit 位图法统计活跃用户 一亿个用户,用户中有频繁登录的,...如何来查询活跃用户,例如一内登录三次以上的   存储格式? user_id isLogign 1 1 ...
  • redis解决实际问题-----位图法...3、如何来查询活跃用户,【如一内登录三次】 解决思路: 1、用数据库解决 如果用数据库解决,将用户的登录信息都放在表中,这时,数据库的表会急剧增大 同时,要用到gro
  • 英文全称 MAU(Monthly Active User)[1] ...受统计方式限制,互联网行业使用的月活跃用户数一般指在统计周期(/月)内,启动过该App的用户数。活跃用户数按照用户设备维度进行去重统计,即在统计周期(/...
  • 今天,我们主要来谈谈如何用Bitmaps来实现统计活跃用户的功能。 什么是 Bitmaps Bitmaps 并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,他们的最大长度是512...
  • 3、如何来查询活跃用户,【如一内登录三次】 解决思路: 1、用数据库解决 如果用数据库解决,将用户的登录信息都放在表中,这时,数据库的表会急剧增大 同时,要用到group,sum运算,计算较慢,频繁的...
  • 网站活跃用户统计的思路与设计

    千次阅读 2019-07-06 08:43:15
    简单的讲,活跃用户就是:一段时间内,有多少登录用户访问了你的站点。这儿的时间段可以为:天,,月。同时也可以细分到各个子站点。通过活跃用户,我们可以看出一个站点的受欢迎程度,毕竟一个站点做的好不好,最...
  • 案例 国外某网站 ...3.如何来查询活跃用户。如1内 登陆3次的. 以8个用户举例: day1 10001000 day2 00001000 day3 10001000 day4 00001000 day5 10001000 day6 00001000 day7 10001000 se...
  • 使用位图法来统计 可以用redis的setbit命令来统计(setbit bitop) ...2: 把1的位图 and 计算, 位上为1的,即是连续登陆的用户 redis 127.0.0.1:6379> setbit mon 100000000 0 (integer) 0 redis...
  • redis实际应用位图法统计活跃用户

    千次阅读 2015-03-12 21:01:24
    如何来查询活跃用户,【如1内登陆3次的】解决思路: 用位图法来进行解决。登陆的用户为1,没有登陆的用户为0 Log0721: ‘011001……………0’…… log0726 : ‘011001……………0’ Log0727 : ‘01100
  • 第11章 需求五:本周回流用户数 本周回流=本周活跃-本周新增-上周活跃 11.1 DWS层 使用日活明细表dws_uv_detail_day作为DWS层数据 11.2 ADS层 1)建表语句 hive (gmall)> drop table if exists ads_back_count; ...
  • 用户活跃度标签建模

    2020-06-08 17:36:17
    期望根据客户近3个月的登录行为和发帖更新贴行为,评估客户的活跃度,将活跃度分为多个等级,以根据不同的活跃等级开展不同的营销活动。 基本思路 1、采用聚类算法,特征值取最近3个月每周(一取7天)登录次数,...
  • 作者:海致BDP 作为还没毕业的大四狗,出来跨专业实习可谓是困难重重,一个化工男转战互联网运营,你说难不难!...活跃率是某一时间段内活跃用户在总用户量的占比,根据时间可分为日活跃率(DAU)、周活跃率(WAU)
  • 3、如何来查询活跃用户【如1内登录3次的】 1)周一10个用户的初始化登录----未登录:0 127.0.0.1:6379> setbit mon 100000000 0 (integer) 0 2)周一随机用户登录 5号用户登录 127.0.0.1:6379>...
  • Redis位图法统计活跃用户 1.题目 若网站有10亿个用户, 现在要统计一内连续登录的用户 1.1解决: 可以用一个字节8个位表示7个人, 首位不算固定为0, 若某人周一登录则置为1, 没登录则为0 127.0.0.1:6379> set mon...
  • 北京时间9月27日上午消息,现在在美国和加拿大,“阅后即焚”照片分享应用Snapchat的日活跃用户超过6000万,大约为Facebook的三分之一。 该公司首席战略官伊姆兰·汗(Imran Khan)在纽约的广告(Advertising Week)上...
  • **流失用户数:**发生对应行为后,之后的一没有活跃记录的用户数 本人试写过一段查询逻辑,但是报错,大概知道错误和Case那块有关,但不知道具体如何解决 ```mysql select t1.行为, count(DISTINCT...
  • 一、需求背景首先,我们来看一下需求:网站统计用户登录的次数,具体如下:网站有1亿个用户,有经常登录的,也有不经常登录的如何来记录用户的登录信息如何查询活跃用户:比如:一内,登录3次的二、使用传统的关系...
  • 首先我们看一个场景:一个网站,需要统计一内连续登陆的用户,以及一个月内登陆过的用户。如果用传统的数据库如Mysql来实现的话,很难做到。但如果用Redis来做的话,就很简便。Redis的集合类型和Bitmap类型都可以...
  • 离线数据仓库项目:用户活跃度分析需求分析日志数据采集用户活跃表总体情况ODS层数据加载DWD层数据加载活跃用户加载DWS层数据加载ADS层数据[日、、月]加载ADS层数据[最近7天连续活跃3天]新增用户加载DWS层数据加载...
  • 如何来查询活跃用户,比如一内登陆三次?方案一:建用户表,uid:logtime登陆一次logtime+1,这里有个明显问题,如此大的客户量,每天一个用户的登陆次数不确定,不可能把如此巨大的信息量存入数据库(虽然可以...
  • 如何查询活跃用户:比如:一内,登录3次的 二、使用传统的关系型数据库 我们使用传统的关系型数据库(比如:Oracle)来存储这样的数据,如下图所示。 每周产生7亿条数据,对于任何一个关系型数据库来说,都是...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 338
精华内容 135
关键字:

周活跃用户