作业题:
在会员分析中计算最近七天连续三天活跃会员数。
项目的数据采集过程中,有哪些地方能够优化,如何实现?
连续值求解问题
对表 dws_member_start_day 中的数据使用 row_number()函数进行排序,并且根据设备号 device_id分组,登录日期dt排序,用日期减去排名
得到groupId 并限定如期最近7天,根据设备号和groupId分组,求出统计值cnt 大于等于 3的记录。
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)
SELECT count(distinct device_id) total
FROM tmp2;
数据采集优化问题
采集数据时,可以进行简单的数据过滤,将无效的数据直接过滤使得ODS层可以减少存储成本和处理效率。
使用 file channel 或者kafka channel 使数据保持可靠性。