02-数仓建模分层
1、数据仓库分层
ODS:原始数据层
存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。作用:在业务系统和数据仓库之间形成一个隔离层,保存的是原数据
DWD:数据明细层
是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合,是一个包含所有主题的通用的集合
会在ods层基础上,做三件事:
①结构和粒度与ods保持一致,对ods层数据进行清洗(去空、去脏数据,去超过极限的数据)
②调整压缩比例:
原始数据----->ods层,会有一个文件格式,比如使用orc、parquet等,在ods层,我们希望压缩算法的压缩比特别高,用以节省空间!!
DWD、DWS中,我们期望的文件格式是解压和压缩速度快,用以提高查询效率!!
③看是否能进行维度退化
比如说大学这个维度,在mysql中分了大学、学院、专业三个维度,那么将其合并成一个维度!
sql语句比较好实现,也就是三张表合并为一张表(第三范式变为第一范式,直接用join on)
降维的缺点和优点:
优点:减少shuffle,更贴近星型模型
缺点:增加了冗余,有些维度表不能共用(比如专业很多学校都开设了,如果变为第一范式(一张表),那么不能共用)
注:这里说的降维并不是全部弄成一张大表,还是需要区分事实表和维度表,是将雪花模型的多级维度进行合并!!!
DWS:数据服务层
以dwd为基础,进行轻度汇总,一般聚集到以用户当日、设备当日、商家当日、商品当日等等的粒度。
在这层通常会有以某一维度为线索,组成跨主题的宽表,比如一个用户的当日签到数、收藏数、评论数、抽奖数、订阅数、浏览商品数、添加购物车数、下单数、支付数等组成的多列表
注:其实这一层就是一张行为宽表,以时间(每天、每周、每月)统计用户(商品、商家)所做的所有事!!!(是最重要的中间表)
注:意义:如果有了这一层,那么对于DM层的什么地区签到、收藏、总评论数等指标都能灵活实现!!
create external table dws_user_action(
user_id string comment '用户id',
order_count bigint comment '下单次数',
order_amount decimal(16,2) comment '下单金额',
payment_id bigint comment '支付次数',
payment_amount decimal(16,2) comment '支付金额',
addcart_ct bigint comment '购物车添加次数',
favorite_ct bigint comment '收藏次数',
comment_ct bigint comment '评论次数',
.................. //还有很多列,对于sql,可以先一个指标一个指标求出来,然后根据user_id join
)comment '用户行为宽表'
partitioned by('dt' string)
stored as parquet //存储格式
location '/warehouse/online_trade/dws/dws_user_action'
tblproperties("parquet.compression"="snappy") //压缩算法
DM:数据集市
也叫APP、ADS层。
数据集市,以某个业务应用为出发点而建设的局部dw,dw只关心自己需要的数据,不会全盘考虑企业整体的数据架构和应用。每个应用有自己的DM。
也就是说,面向实际的数据需求,以DWD或者DWS层的数据为基础,组成的各种统计报表。
