面试系列六 之 用户行为数据分析
Posted chbxw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试系列六 之 用户行为数据分析相关的知识,希望对你有一定的参考价值。
1.1、数仓分层架构
分层优点:复杂问题简单化、清晰数据结构(方便管理)、增加数据的复用性、隔离原始数据(解耦)
层级 | 功能 |
---|---|
ods | 原始数据层 存放原始数据,保持原貌不做处理 |
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层留存用户率表
以上是关于面试系列六 之 用户行为数据分析的主要内容,如果未能解决你的问题,请参考以下文章