数据仓库中的数据统计可以分为三大类:增量类、累计类和留存类。累计类进一步细分为历史至今的累计与最近一段时间内的累计(如滚动月活跃天、滚动周活跃天以及最近N天的消费情况)。为了实现高效的统计,可以采用基于bitmap思想的模型表。
数据仓库中的数据统计可以分为三类:增量类、累计类和留存类。累计类可以进一步细分为历史至今的累计与最近一段时间内的累计,如滚动月活跃天、滚动周活跃天及最近N天的消费情况。借助bitmap思想的模型表能够高效地统计最近一段时间内的累计类和留存类数据。
以下是几个最近一段时间内累计类和留存类的具体业务问题。作为大数据从业者,建议您先思考自己的解决方案,然后再继续阅读:
统计最近30天用户的累计活跃天数(用户在这30天中有N天使用微视应用,N介于1到30之间,然后将月活跃用户的N天相加)。
统计最近7天的用户累计使用时长。
统计最近30天有播放行为的用户总数。
统计最近30天活跃用户中有多少在连续3天及以上的时间内活跃。
统计28天前活跃用户的1天、3天、7天、14天和28天的留存率。
在讨论本文的主题之前,让我们先看看传统处理思路:
统计最近30天用户的累计活跃天数?
统计最近7天的用户累计使用时长?
统计最近30天有播放行为的用户总数?
统计最近30天活跃用户中有多少在连续3天及以上的时间内活跃?
统计28天前活跃用户的1天、3天、7天、14天和28天的留存率?
有没有一种方法可以在一个模型表中轻松统计这些数据,而不需要重复计算或复杂的join操作?答案是肯定的,可以借鉴bitmap的思想。
借鉴bitmap思想,可以将最近31天的活跃用户状态和消费数据存储在一个字符数组中,数组的每个位置表示距离当前日期的天数。例如,active_date_set表示31天活跃集,play_vv_begin_set表示31天播放次数集。通过这种方式,可以极大地压缩存储空间,并简化统计过程。
在Hive中使用这些0/1集合串需要一些辅助函数,例如str_sum()、str_count()、str_min()和str_max()。这些函数分别用于计算最近N天的加总、最小值、最大值和特定值的出现次数。
通过使用基于bitmap思想的模型表,我们可以高效地统计最近一段时间内的累计数据和留存率,而无需进行复杂的join操作。虽然这种方法会增加一定的存储空间,但可以显著提升计算效率和灵活性。