• 数据仓库 最近连续3周活跃用户数


    最近3周连续活跃的用户:通常是周一对前3周的数据做统计,该数据一周计算一次。

    本例需求:计算上上周、上周、本周连续3周的活跃用户。

    依赖数据:dws_uv_detail_wk(每周活跃设备明细表)。

    建表语句:

    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 '	'
    location '/warehouse/gmall/ads/ads_continuity_wk_count';

    数据导入脚本:

    ①concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$do_date','MO'),-1)) 表示从上上周周一到本周周日。

    ②having count(*)=3 因为周活表对日活的id进行了去重,所以,如果连续3周都有数据,则每周一条,加起来等于3。

    #!/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".ads_continuity_wk_count
    select 
         '$do_date',
         concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$do_date','MO'),-1)),
         count(*)
    from 
    (
        select mid_id
        from "$APP".dws_uv_detail_wk
        where wk_dt>=concat(date_add(next_day('$do_date','MO'),-7*3),'_',date_add(next_day('$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;"
    
    $hive -e "$sql"
  • 相关阅读:
    json2源码
    在table中插入别的代码
    基于HTML5和Javascript的移动应用架构
    webkitscrollbar
    性能调优之Javascript内存泄漏
    javascript时区函数介绍
    几道面试题
    CSS property: webkitbackfacevisibility
    某人2013js趋势的一些判断
    用js操作cookie保存浏览记录
  • 原文地址:https://www.cnblogs.com/noyouth/p/13208017.html
Copyright © 2020-2023  润新知