数据仓库基础总结

1、数据仓库分层
ODS(原始数据层):对数据的一个备份。例如从MySQL中导入数据表到HDFS中,只是把MySQL中的表复制一份到HDFS中。
DWD(明细数据层):对ODS层表中的数据进行清洗。例如对表中一些脏数据进行过滤或不符合指标的数据进行过滤。
DWS(服务数据层):以DWD层数据为基础,进行汇总。例如一个用户的当日收藏数初步统计。
ADS(数据应用层):一般情况下,以DWS为基础,或其他层级的表数据为基础,为各种指标统计报表提供数据。

对于各个层级表的命名都是以ods、dwd、dws、ads为前缀。

总结:
ODS、DWD、DWS、ADS每层都有表来存储要维护的数据。前边的层级中的数据为下一层做铺垫,通过SQL转化成MR进行计算,最后得出想要的数据报表。

2、数据仓库表的分类
首先分为2大类,维度表和事实表。维度表又分为实体表和维度表;事实表又分为事务性事实表和周期性事实表。
实体表:实体对象。例如用户,商品,店家等。
维度表:业务状态,状态的码表,类似于字典表。例如订单状态分为未发货、已发货、未收货、已收货;商品分类分为一级分类、二级分类、三级分类。
事务性事实表:一旦发生不再改变。例如交易流水,操作日志。
周期性事实表:随业务不断产生的数据周期性的变化。例如订单状态,分为未发货——已发货——未收货——已收货——已完成。

那么数据同步策略是如何呢?
实体表 ——> 每日全量同步
维度表 ——> 每日全量同步
事务性事实表  ——> 每日增量同步
周期性事实表 ——> 每日新增或修改的数据进行同步,制作拉链表

维度表:只能是事实表的一个分析角度。

事实表:表里没有存放实际的内容,它是一堆主键的集合,这些ID分别能对应维度表中的一条记录。
(维度表之间的中间表) 事实表的度量值通常是数值类型(条/个/次)
事实表行对应一个度量事件。

缓慢变化维:随时间的变化维度属性也发生变化。
直接覆盖、增加维度行、增加维度属性列、增加微型维度

拉链表
对于每个订单,每条订单数据每天都会发生变化,对于hive数仓来说,数据变化是对表的插入。若每日去对新增或修改的数据进行同步的话,对文件存储系统来说,会存在很大的隐患的,那怎么办呀?
这就引入了拉链表,那么什么是拉链表呢?今天我们就说说拉链表,它是对新增或变化的数据进行定期合并。例如我3日下了一个订单它的状态是未发货,那么4日的状态是已发货,6号的时候我收到货了,就对6号我的这个订单的数据进行同步,有了拉链表我们只需要同步一条数据,就是同步这条订单的最终状态 。要不然的话就会同步4条数据,你们想想,一个订单就同步4条数据,那么10万条呢?是不是浪费文件系统的存储资源,所以这种场景最适合拉链表了。

3、数据库三范式
第一范式:属性不可分割;
第二范式:不存在部分函数依赖;
第三范式:不存在传递性函数依赖;

4、关系建模和数仓的维度建模
关系建模:主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都遵循第三范式。
维度建模:主要分为星型模型、雪花模型、星座模型。
星型模型:维度表只有一层。
雪花模型:维度表有多层。
星座模型:星座模型与前两种的区别在于事实表的数量,星座模型是基于多个事实表。
数据仓库尽量做成星型模型,要不然还要对它们进行降维。

最后抛出一个问题,请大家留言:
为什么维度建模要设计成宽表,而关系模型要把表设计成不可划分的也就是遵循三范式?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值