程序笔记   发布时间:2022-07-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了电商离线数仓项目实战(上)--第五阶段模块一作业大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

需求

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) @R_663_10586@l 
  FROM tmp2;
" 

hive -e "$sql"

详解(2)

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

解答:

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

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

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

大佬总结

以上是大佬教程为你收集整理的电商离线数仓项目实战(上)--第五阶段模块一作业全部内容,希望文章能够帮你解决电商离线数仓项目实战(上)--第五阶段模块一作业所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。