• 电商离线数仓项目实战(上)--第五阶段模块一作业


    需求

    1、在会员分析中计算最近七天连续三天活跃会员数。

    2、项目的数据采集过程中,有哪些地方能够优化,如何实现?

    详解(1)

    1、在会员分析中计算最近七天连续三天活跃会员数。

    分析:

    连续值求解问题,常用四路

    -- 1、使用 row_number 在组内给数据编号(rownum)
    -- 2、某个值 - rownum = gid,得到结果可以作为后面分组计算的依据
    -- 3、根据求得的gid,作为分组条件,求最终结果

    本题中,对表dws_member_start_day中的数据使用排名函数row_number()排序,然后根据设备号device_id分组,登录日期 dt 排序,用日期(dt) 减去排名(row_number),得到groupId并限定日期最近7天,根据设备号和groupID分组,求出统计值cnt大于等于3的记录数,即为最近7天中连续3天活跃会员数。

    解答过程:

    ads层建表

    drop table if exists ads.ads_member_continuous_values;
    create table ads.ads_member_continuous_values
    ( 
    `cnt` string,
    ) COMMENT '最近7天连续3天活跃会员数'
    stored as parquet;

    加载ads层数据

    #!/bin/bash
    
    source /etc/profile
    if [ -n "$1" ]
    then
        do_date=$1
    else
        do_date=`date -d "-1 day" +%F`
    fi
    
    sql="
    WITH tmp as(
                SELECT device_id,dt,
                    date_sub(dt,row_number() over(partition by device_id order by dt)) groupId
                  FROM dws_member_start_day
                WHERE dt between date_sub(current_date,-7) and current_date),
         tmp2 as(SELECT device_id,count(1) cnt 
                  FROM tmp
                GROUP BY device_id,groupId
                having cnt >= 3)
    insert into table ads.ads_member_continuous_values
    SELECT count(distinct device_id) total 
      FROM tmp2;
    " 
    
    hive -e "$sql"

    详解(2)

    2、项目的数据采集过程中,有哪些地方能够优化,如何实现?

    解答:

    • Flume的双层采集(第一层数据采集,第二层数据汇聚),应对大数据量的情况;

    • Channel可以使用Kafka channel,兼具File Channel和Memory Channel的优点;还可以兼具离线和实时计算;

    • Flume拦截器,可以过滤掉多余的数据,仅保留Json,使解析过程简单些;

  • 相关阅读:
    对网页图片的增删改管理
    还没搞完的排序(后期更新)
    web实现图片动态
    C++11 笔记
    如何解决刷新系统桌面响应速度很慢的问题
    CGrowableArray解析 _ DXUT容器
    测试...外部指针访问private
    CustomUI Direct3D9_Sample
    缺少.lib文件导致的Link2019 解决方案汇总
    在DirectX9中使用DXUT定制按钮来控制模型旋转的问题
  • 原文地址:https://www.cnblogs.com/aloneme/p/15074230.html
Copyright © 2020-2023  润新知