陪玩 App 3.5 版本用户关怀数据统计需求 09.19

2018-09-25  本文已影响0人  姚宝淇

----以此纪念在YY第一次加班到9点

数据字典 事件口径

思路:

需求前面的部分很简单,即从事件明细表中提取相应ID的事件及其属性,并计算常规统计项,其中【进入任务页面(全部)】需要单独计算,再与结果union(范围重叠的事件无法使用一个case when来实现,否则这条记录的事件字段到底取哪个值?)

用户数即为当事件为【完成任务】时,对事件value2去重而得,value2实际上就是uid;

召回用户数涉及是否活跃,需要与日活表关联,口径为当事件为【完成任务】且value2属于日活表。

难点:

hive不能使用in和not in,如何判断当前value2是否为活跃用户呢?

我用了非常麻烦的办法,先在日活表里取出活跃用户清单并打上标签is_active=1,记为tb0;

构造主表tb1,取常规属性,用事件明细表左连接tb0,获取标签is_active,此时活跃的value2有值为1,不活跃的value2为null;

构造临时表tb2,以构造属性用户数&召回用户数:当事件为【完成任务】时,用户=value2,否则为null;当事件为【完成任务】且is_active=1时召回用户=value2,否则为null;

最后对上述统计项进行聚合运算。(知识点:聚合运算会跳过值为null的记录不予统计)

浩哥的做法:分三类从事件明细表a中取数,对于非【完成任务】的事件,写死value2为null;对于属于【完成任务】的事件,将value2为null的情况转化为0;(这是我没有想到的,因为存在【完成任务】但value2为null的情况,此时将不会计数,导致用户数有误)

在聚合运算的时候,通过value2与日活表b(仅取uid)做左连接,取出b.uid,当b.uid不为空,即该value2是活跃用户,召回用户=value2,否则为null,对此直接count即可!

上一篇下一篇

猜你喜欢

热点阅读