离线数仓做多维度报表

我们把数据写道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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值