zoukankan      html  css  js  c++  java
  • 数据仓库 最近连续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"
  • 相关阅读:
    SQL Server死锁产生原因及解决办法
    SqlServer表死锁的解决方法
    SQL Server中解决死锁的新方法介绍
    SQL Server 中WITH (NOLOCK)浅析
    二分图匹配
    java list三种遍历方法性能比较
    CSharp Algorithm
    存几个html画图的网站
    [HDU 1358]Period[kmp求周期]
    Android解析Excel文档完整示例
  • 原文地址:https://www.cnblogs.com/noyouth/p/13208017.html
Copyright © 2011-2022 走看看