我们把数据写道dwd层以后,就可以做一些报表统计了
首先要理解一些概念
分析主题、度量、维度
分析主题:
流量概况分析子主题、访问分析子主题、来源分析子主题、访客分析子主题
核心度量:
pv数、uv数、会话数、跳出数、访问时长
核心维度:
地域维度、访客新老属性、来源维度、时间维度、终端设备属性、网络属性、入口页、退出页、是否跳出会话
维表的数据获取方式:
引入业务表作为维表
引入画像标签表作为维表
根据规律手动构建
通过计算构建出维表
1-如何获取到某个网页的贡献量
因为对于某个网页的贡献量的计算是:
a的子节点个数 + a的所有的子节点的贡献量
例如:
a->b
b->c
b->d
c->f
f->b
f->h
得出a的贡献量为6
这个算法很难用sql来实现
因为这个数据结构很适合用二叉树来表达
因此我们使用二叉树的数据结构,并使用递归的方式,来计算出每个节点的贡献量
问题产生:
1.算出来的每个节点的贡献量要怎么保存?
解决方法:
可以再递归方法中传出一个ListBuffer,用来存储一个元组(节点名称,贡献量)
2.要怎么将这些网页名称放进二叉树这个数据结构中呢?
解决方法:
写一个spark程序:
1. 读取数据部分:
先从用户日志信息明细表 dwd.mall_applog_detail 中读取数据,
将数据封装进一个pojo中,包含的字段有
(page_url,
guid,
session_id,
ts,
ref_url
)
按照session_id的来group by
相同会话id分到一起
2. 逻辑部分****************(重点)
首先,我们要遍历每条pojo,将里面的url 都创建为一个节点,并保存到一个ListBuffer_tree中(这个ListBuffer 也就是生成了一个树)
并且,再创建节点后,再取出ref_url 来判断它是否应该有父节点
如果有父节点,就从ListBuffer_tree中 找到一个最近的父节点,更改它的子节点信息
而且,一个session_id 中,可能有多次是没有ref_url,即来源网页的,也就是要生成多个数
,因此我们再最开始生成一个ListBuffer_trees,来存放Listbuffer_tree