3、数仓主题分析
3.1 什么是数仓
面向
主题(针对某一维度)、集成的(数据统一集中管理的)、相对稳定的(相对业务系统数据变动较小的)、反映历史变化(反映出业务或用户行为动态变化的过程)
的数据集合,作为用户画像、推荐系统或业务运营管理决策的基础。
数仓的引入主要是为了做联机或离线数据分析,一方面是对业务系统分析系统的解耦,减少因大量数据运算而影响正常的业务系统运行,另一方面是可以解决普通数据库数据存储极限问题。
3.2 ETL: 数据迁移(抽取、转换、加载)
🏗 是联机数据处理、数据挖掘的基础,负责将分布的数据源抽取到中间层进行清洗、转换、集成,最后加载进数据仓库或数据集市中的过程。
主要是一些基础工具的使用。如:Datastage(IBM,专业、价格高), Infomatica(商业版), 开源的Kettle(水壶)
3.3 数仓分析主题
针对某个主题(中心)展开的分析。
(更多不同行业的主题可以参照神策的各种行业指标即可。)
如:
用户分析主题:
日新统计报表:每日新用户
日活统计报表:每日用户活跃
留存分析报表
来源分析报表等
流量分析主题pv(page view)
pv概况统计报表
pv来源分析报表
pv热点页面分析报表
pv热点栏目分析报表等
app分析主题
app版本分布统计表
app升级情况统计报表等
GMV销量分析主题(总成交金额)
gmv总额统计表
gmv品类统计报表
gmv品牌统计报表
gmv增长趋势报表等
以电商数仓为例:
总体运营、网站流量、销售转化、客户价值、商品品类、营销活动、风控、竞品分析
为主题为指导数仓的建设指标
3.4 本项目中的主题
- 转化率分析
- 销售分析
- 广告效果分析
- 用户行为规律分析
3.5 事实表及维度举例
访客浏览记录表
user,session,page,lanmu,pinlei,pid,datetime,areacode
u1,s1,/abc/dd,lm1,cat1,p01,2019-10-21 16:18:21,11010
u1,s1,/bbb/cd,lm2,cat3,p08,2019-10-21 16:18:30,11010
u2,s2,/aty/rt,lm3,cat5,p05,2019-10-21 16:17:21,01010
u2,s2,/bbb/cd,lm2,cat3,p08,2019-10-21 16:19:30,01010
上面的表就是一个
事实表
对事实表,假如要计算pv数(事实指标)
我们按如下口径来统计:
- 总pv数
- 每个栏目的pv数
- 每个省份的pv数
- 每个商品品类的pv数
- 每个省份中的每个栏目的pv数
从这些需求中可以看出,
同一个事实指标,可以通过多种角度(口径)去统计!
这些角度,或口径,就叫
“维度!”
维度组合中的维度越多,统计出来的事实指标粒度越细
3.6 维度建模的常见模型:
星型模型:一层进行关联分析(类似于外键,一个事实信息关联到某一张表,1对1),分析时一个信息join一张表即可
雪花模型:数据关联到多层(即一个事实信息关联到多张表,1对多),分析时针对每一个事实信息都需要进行多表join
星座模型:在实际中应用不是太多,如果应用太多应该考虑一下是否分析的主题或埋点事实设计不合理
4、数仓分层管理
4.1 数仓分层
分层的意义:
数据管理更明晰!运算复用度更高!需求开发更快捷!便于解耦底层业务(数据)变化!
数据仓库中的数据表,往往是
分层管理、分层计算
的:(以阿里为例)
-
ODS层:操作数据(最原始的数据)层 —
贴源层
- DWD层:数仓明细层,对ods进行切分、加工
- DWS层:数仓汇总层,轻度聚合
- ADS层: 应用服务层
ODS层:对应着外部数据源ETL到数仓体系之后的表!
DWD层:数仓明细层;一般是对ODS层的表按主题进行加工和划分;本层中表记录的还是明细数据;
DWS层:数仓汇总层;
ADS层: 应用层,主要是一些结果报表
4.2 分层原因与分层举例
① 空间换时间(让大量运算任务可复用)
通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。
② 把复杂问题简单化
将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
③ 便于解耦 “底层业务(数据)的变化”
随着业务的变化,只需要调整
底层的数据
,应用层对业务的调整零感知
— ods层 : 贴源层,跟浏览日志结构保持一致
— dwd层明细表 : 对ods的某些字段进行了更进一步的细化,或者关联了一些额外信息
user,session,page,lanmu,pinlei,pid,datetime,areacode
u1,s1,/abc/dd,lm1,cat1,p01,2019-10-21 16:18:21,11010
u1,s1,/bbb/cd,lm2,cat3,p08,2019-10-21 16:18:30,11010
u2,s2,/aty/rt,lm3,cat5,p05,2019-10-21 16:17:21,01010
u2,s2,/bbb/cd,lm2,cat3,p08,2019-10-21 16:19:30,01010
u1,s3,/bbb/cd,lm2,cat3,p08,2019-10-21 16:18:30,11010
–dws层: 会话聚合 dws_acc_agg_s
用户 会话 pvs
u1 s1 2
u1 s3 1
u2 s2 2
–dws层: 用户聚合 dws_acc_agg_u
用户 会话数 pvs
u1 2 3
u2 1 2
有了上述模型,则:
需求1: 日活总数
需求2: 日访问总次数
需求3: 日pv总数
需求4: 日访问次数>2次的人
需求5: 日访问pv数最高的前100人
需求6: 日访问次数最高的前100人
这些需求,都可以直接从dws_acc_agg_u得出
Gitee位置