面试系列六 之 用户行为数据分析

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层留存用户率表

在这里插入图片描述

以上是关于面试系列六 之 用户行为数据分析的主要内容,如果未能解决你的问题,请参考以下文章

面试系列二 之 项目架构

面试系列六八 之 java知识点

前端面试题系列之-CSS及页面布局篇

面向面试编程代码片段之GC

前端面试题之手写promise

OCR技术系列之六文本检测CTPN的代码实现