关注我的公众号【宝哥大数据】,更多干货等着你

1.1、数仓分层架构

分层优点:复杂问题简单化、清晰数据结构(方便管理)、增加数据的复用性、隔离原始数据(解耦)

层级 名称 功能 压缩方式 存储格式 压缩比
ods 原始数据层 存放原始数据,保持原貌不做处理 Snappy orc 10:1
dwd 明细数据层 对ods层数据清洗(去除空值,脏数据,超过极限范围的数据),维度退化和降维, 错误数据在万分之一可以接受
dws 服务数据层 轻度聚合
ads 应用数据层 具体需求

数仓中各层建的表都是外部表

1.2、埋点行为数据基本格式(基本字段)

公共字段:基本所有安卓手机都包含的字段
业务字段:埋点上报的字段,有具体的业务类型
下面就是一个示例,表示业务字段的上传。
行为数据启动日志/事件日志表关键字段:

{"ap":"xxxxx",//项目数据来源 app pc
"cm": {  //公共字段"mid": "",  // (String) 设备唯一标识"uid": "",  // (String) 用户标识"vc": "1",  // (String) versionCode,程序版本号"vn": "1.0",  // (String) versionName,程序版本名"l": "zh",  // (String) 系统语言"sr": "",  // (String) 渠道号,应用从哪个渠道来的。"os": "7.1.1",  // (String) Android系统版本"ar": "CN",  // (String) 区域"md": "BBB100-1",  // (String) 手机型号"ba": "blackberry",  // (String) 手机品牌"sv": "V2.2.1",  // (String) sdkVersion"g": "",  // (String) gmail"hw": "1620x1080",  // (String) heightXwidth,屏幕宽高"t": "1506047606608",  // (String) 客户端日志产生时的时间"nw": "WIFI",  // (String) 网络模式"ln": 0,  // (double) lng经度"la": 0  // (double) lat 纬度},
"et":  [  //事件{"ett": "1506047605364",  //客户端事件产生时间"en": "display",  //事件名称  启动和事件日志是根据事件名称的不同"kv": {  //事件结果,以key-value形式自行定义"goodsid": "236","action": "1","extend1": "1",
"place": "2",
"category": "75"}}]
}

根据事件标签的不同可以分成不同的日志表

1.3、各个层的表介绍

1.3.1、ods层

1)ods_start_log 启动日志表

  • 只有一个字段 line(保存着json),按照日期dt分区,表的格式:lzo

2)ods_event_log 事件日志表(格式同启动日志表)

  • 只有一个字段 line ,按照日期dt 分区,表的格式:lzo

1.3.2、dwd层

1)dwd_start_log 启动表

  • 关键字段:mid_id,user_id,dt(分区字段,按照日期分区) (其实这是启动表和事件表的公共字段)
  • 从ods_start_log中的line用get_json_object(line,'$.mid') mid_id的方式获取字段

1.3.2.1、自定义UDF/UDTF(项目中的应用)

  • 自定义UDF函数(解析公共字段,一进一出)
  • 自定义UDTF函数(解析具体事件字段,一进多出)
  • 自定义UDF:继承UDF,重写evaluate方法
  • 自定义UDTF:继承自GenericUDTF,重写3个方法:initialize(自定义输出的列名和类型),process(将结果返回forward(result)),close
  • 为什么要自定义UDF/UDTF,因为自定义函数,可以自己埋点Log打印日志,出错或者数据异常,方便调试。

1.3.2.2、事件日志基础明细表

dwd_base_event_log 事件日志基础明细表

  • 1)关键字段:

    • 公共字段:mid_id,user_id,dt(分区字段)以及event_name、event_json、server_time
  • 2)从 ods_event_log的line 中用 UDF 获取 公共字段 和 server_time,用UDTF 获取 event_name , event_json。

1.3.2.3、商品点击表

dwd_display_log 商品点击表

  • 关键字段:公共字段 + 特有字段
  • 从dwd_base_event_log中直接获取公共字段和server_time,从 dwd_base_event_log的 event_json中获取特有字段,where event_name = "display"
  • get_json_object(event_json,'$.kv.action') action

1.3.2.4、其他的具体事件明细表

类似

表明 表注释
dwd_newsdetail_log 商品详情页表
dwd_loading_log 商品列表页表
dwd_ad_log 广告表
dwd_notification_log 消息通知表
dwd_active_foreground_log 用户前台活跃表
dwd_active_background_log 用户后台活跃表
dwd_comment_log 评论表
dwd_favorites_log 收藏表
dwd_praise_log 点赞表
dwd_error_log 错误日志表

从一张事件基础明细表dwd_base_event_log一共可以获得11张具体事件明细表

二、需求解析

2.1、用户活跃主题

2.1.1、DWS层日活明细表

每日活跃设备分析

2.1.2、DWS层周活明细表

每周活跃设备分析

2.1.3、DWS层月活明细表

每月活跃设备分析

2.1.4、ADS层日周月活跃设备数表

活跃设备分析

2.2、用户新增主题

2.2.1、DWS层日新增明细表

2.2.2、ADS层每日新增设备数表

2.3、用户留存主题

2.3.1、用户留存介绍

2.3.2、用户留存率分析

2.3.3、DWS层日留存明细表

2.3.4、ADS层留存用户数表

2.3.5、ADS层留存用户率表

2.4、沉默用户

2.5、本周回流用户数

2.6、流失用户数

2.7、最近连续3周活跃用户数

2.8、最近七天内连续三天活跃用户数

2.9、需求逻辑

2.9.1 如何分析用户活跃?

在启动日志中统计不同设备id出现次数。

2.9.2 如何分析用户新增?

用活跃用户表 left join 用户新增表,用户新增表中mid为空的即为用户新增。

2.9.3 如何分析用户1天留存?

留存用户=前一天新增 join 今天活跃
用户留存率=留存用户/前一天新增

2.9.4 如何分析沉默用户?

(登录时间为7天前,且只出现过一次)
按照设备id对日活表分组,登录次数为1,且是在一周前登录。

2.9.5 如何分析本周回流用户?

本周活跃left join本周新增 left join上周活跃,且本周新增id和上周活跃id都为null

2.9.6 如何分析流失用户?

(登录时间为7天前)
按照设备id对日活表分组,且七天内没有登录过。

2.9.7 如何分析最近连续3周活跃用户数?

按照设备id对周活进行分组,统计次数大于3次。

2.9.8 如何分析最近七天内连续三天活跃用户数?

  • 1)查询出最近7天的活跃用户,并对用户活跃日期进行排名
  • 2)计算用户活跃日期及排名之间的差值
  • 3)对同用户及差值分组,统计差值个数
  • 4)将差值相同个数大于等于3的数据取出,然后去重(去的是什么重???),即为连续3天及以上活跃的用户

面试系列六 之 用户行为数据分析相关推荐

  1. 读书笔记《了解用户系列六 | 群体用户心理》文/产品100(简书作者)

    <了解用户系列六 | 群体用户心理>文/产品100(简书作者) 原文链接:http://www.jianshu.com/p/41bfa2af83f1 例如在知乎发生的意见领袖抱团互相刷赞同 ...

  2. Dragonboard410c服务器系列六之用户交互系统

    一.前言 本系列文章的前几篇,博主已经给大家分享过如何在Django框架下构建web用户登陆注册系统和实时视频分享的功能,今天,我们将其整合一下,并添加页面构成一套web用户的交互系统. 二.代码分析 ...

  3. JAVA面试常考系列六

    转载自 JAVA面试常考系列六 题目一 一个Applet有哪些生命周期? 一个Applet的生命周期分为以下四个阶段: Init 每次加载时都会初始化一个小程序.此方法通知Applet,方法已经被装入 ...

  4. 面试系列一:精选大数据面试真题10道(混合型)-附答案详细解析

    本公众号(五分钟学大数据)将推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型 ...

  5. 大厂经典面试系列之三:唯品会大数据开发面试【建议关注收藏订阅,你早晚会用上】掌握了这些面试题,余生不在怕面试

    前言 上一篇文章总结了大厂经典面试系列之一:京东Java面试.接下来的文章我将陆续献上大厂的经典面试系列,所列的题目不代表所有,只是从面试者的口中总结的几次面试题,也是万千面试题的缩影,诣在帮助即将面 ...

  6. Rasa课程、Rasa培训、Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes

    Rasa课程.Rasa培训.Rasa面试系列之 Rasa幕后英雄系列-机器学习研究员 Johannes Mosig 博士 Dialogue Transformers第二作者 在 Rasa,我们的团队正 ...

  7. Rasa课程、Rasa培训、Rasa面试系列之:Rasa 3.x部署安装初体验

    Rasa课程.Rasa培训.Rasa面试系列之:Rasa 3.x部署安装初体验 Rasa 3.x部署安装 进入Ananconda系统,新建rasa虚拟环境 conda create --name in ...

  8. JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    2019独角兽企业重金招聘Python工程师标准>>> 我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Sprin ...

  9. xen虚拟化实战系列(六)之xen虚拟机破解密码

    xen虚拟化实战系列文章列表 xen虚拟化实战系列(一)之xen虚拟化环境安装 xen虚拟化实战系列(二)之xen虚拟机安装 xen虚拟化实战系列(三)之xen虚拟机复制 xen虚拟化实战系列(四)之 ...

最新文章

  1. php7 数组与字符串,第7天 PHP字符串、数组
  2. (三) LtRecyclerView v2.x (自定义上拉和下拉刷新View)
  3. oracle 物化视图 ORA-23413: 表 xxx.xx 不带实体化视图日志
  4. BZOJ-1934-Vote善意的投票-SHOI2007
  5. IO编程__字节流__输入、输出__图片移动
  6. 【算法竞赛学习】金融风控之贷款违约预测-特征工程
  7. android导航屏幕,发现具有软件导航栏的Android设备的真实屏幕尺寸(以像素为单位)...
  8. Vue3 Composition API(一)——setup、reactive、ref、readonly
  9. (小技巧)Sql server查看sql语句的执行时间(转)
  10. docker from指令的含义_volume_from指令-docker撰写
  11. [渝粤教育] 广东-国家-开放大学 21秋期末考试大数据营销10138k2
  12. Knockout自定义绑定my97datepicker
  13. 在word、ppt中输入矩阵转置符号
  14. linux 登录qq虚拟机,不能输入中文
  15. 微信小程序——从后台获取数据库数据并在前台显示(前端+后端+数据库)
  16. model 和WEB前台页面提交完美自动填充
  17. 3招搞定APP注册作弊
  18. vector多维向量初始化等操作
  19. 技术控必读 从Type-A到Type-C发展历程
  20. 正弦函数的傅里叶级数展开计算

热门文章

  1. 经典论文之ResNet
  2. 华三华为思科交换机升级
  3. 基于ISMS和信息安全等级保护两个标准的信息安全项目设计方法
  4. OnlyOffice验证(一)DocumentServer编译验证
  5. 路透:香港金管局要求银行收紧对中国内地企业的贷款
  6. win10快捷键及常用命令整理
  7. mysql 一个中文占多少字节数_mysql里一个中文汉字占多少字节数?
  8. 张文成的《墨菲定律》读后感(三)
  9. 服务器E盘找不到,Windows03系统D盘不见怎么办
  10. Win7系统没有注册表操作权限的解决方法