数仓实战——最近N天uv优化策略

对于做数据的小伙伴来说,求最近N天(或者从某个时间点截止到当前)的UV可以说是最常见的场景了,也是数据岗位面试中经常会遇到的问题。第一感觉,可能大部分人都觉得这个问题有什么好说,直接过滤、去重计数就完了呗!但是,当数据量大了,或者说这么简单的问题,怎么在面试中体现自己的水平呢?[/手动狗头/]

好了,言归正传,对于这个问题,常见的策略有以下几种:

1、直接过滤,去重计数。对于小数据量,简单高效的解决问题就是最优解。

SELECT  count(distinct user_id) as uv
FROM    dwd_log_vst
WHERE   
ds > to_char(dateadd(to_date('${cur_date}','yyyymmdd'), - n,'dd'),'yyyymmdd')

2、按照天和人维度去重构建轻度汇总中间表,采用天分区;再进行过滤、去重计数。这样做可以减少扫描的数据量,提升计算效率。


INSERT OVERWRITE TABLE dwd_log_vst_1d (ds='${cur_date}')
SELECT  user_id
FROM    dwd_log_vst
WHERE   ds = '{cur_date}'
GROUP BY user_id
;
SELECT  count(distinct user_id) as uv
FROM    dwd_log_vst_1d
WHERE   ds > to_char(dateadd(to_date('${cur_date}','yyyymmdd&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_心如止水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值