(1). 前言

自己没有数仓的相关积累,最近被安排出差做数仓项目,以前认为,无非不过是采集数据,然后,把数据放到HDFS里,然后再进行计算出结果就好了.
结果: 客户比自己更加的精通数仓,深入一学习,数仓有着一套自己的术语以及管理方法.

(2). 数仓分层介绍

ODS层: Operation Data Store
      数据准备区,也称为贴源层,数据仓库源头系统的数据表通常会原封不动的存储一份,这称为ODS层,是后续数据仓库加工数据的来源.   
	  1. 保持数据的原汁原味,不做任何修改,有效的备份数据的作用.  
      2. 数据采用压缩,减少磁盘存储空间.
      3. 创建分区表("按天分区"),防止全表扫描.  

DW层: 
    DWD : Data Warehouse Detail
	  该层主要存放:业务事实表信息.
	  细节数据层,是业务层与数据仓库的隔离层.它的结构和粒度与ODS表保持一致,对ODS层数据进行清洗(去除空值/脏数据/脱敏/退维)等操作.              
	
	DIM: Dimension(维度层)	
	   该层主要:存放维度表信息. 
    
	DWS : Data Warehouse Summary
	  在DWD的基础上,"按天轻度汇总".   
	  
	DWT : Data Warehouse Topic  
	 以DWS为基础,对数据进行"累积汇总".  
	  

ADS层: Application Data Store
     该层主要是提供数据产品和数据分析使用的数据,一般会存储在ES、MySQL等系统中供线上系统使用.  

(3). 数据集市(Data Mark)

数据集市是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是”部门级”的,一般只能为某个局部范围内的管理人员服务,而数仓一般是”企业级”,它的目的是为整个企业各个部门提供决策支持手段.

(4). 为什么要分层?

(5). 关系模型与维度模型

关系模型严格遵循第三范式(3NF),较松散零碎,物理表数量多,数据冗余程度低.
由于数据分布于众多的表中,这些数据可以更为灵活地被应用,功能性较强.主要应用于OLTP系统中,保证数据的一致性以及避免冗余,所以大部分业务系统的表都遵循第三范式.

维度模型主要应用于OLAP系统中,通常以某一个事实表为中心进行表的组织,主要面向业务,特征是可能存在数据的冗余,但是能方便的得到数据.
关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率(凡涉及到join就会造成要在内存中进行数据过滤).所以通常采用维度模型建模,把相关各种表整理成两种:事实表和维度表.

(6). 维度模型分类

星型模型:
标准的星型模型维度只有一层,而雪花模型可能会涉及多级,维度层级 是雪花模型与星型模型的主要区别.

"星型模型"

雪花模型:
雪花模型比较接近3NF,但是无法完全遵循,因为遵循3NF的性能成本太高.
"雪花模型"

星座模型:
星座模型与前两种情况的区别是”事实表的数量”,星座模型是基于”多个事实表”.
基本上是很多数据仓库的常态,因为很多数据仓库都是多个事实表.所以是否星座只反应是否有多个事实表,它们之间是否共享一些维度表.星座模型不和前两种模型冲突.
"星座模型"

(7). 维度建模案例

维度建模是以数据分析为出发点,不遵循三范式,故数据存在一定的冗余,”维度模型面向业务”,将业务用事实表和维度表呈现出来,表结构简单,故查询简单,查询效率较高.

  1. 维度表:一般是对业务事实的描述信息,每一个维度表对应现实世界中的一个对象或者概念(比如:用户/商品/日期/地区).
  2. 事实表:所谓的事实表是指:”业务事件的度量值”(比如:统计每个商品每天的下单次数/统计商品每日的下单总金额),业务事实表中的每一行代表一个业务事件(比如:下单记录/支付记录/退款记录/加购物车记录/收藏记录),事实表一般由:”维度表外键ID和度量值组成”.
  3. 案例需求如下:张三 2021-09-20 在京东商城 购买了一件商品 花了100圆钱 ,收货地址为:广东省深圳市 –> 订单事实表(user_id/time_id/product_id,address,buy_num,amount)
    "维度建模案例"

(8). 建模步骤

(9). 数仓命名规范

(10). 数仓表命名规范

(11). ODS建模思想

ODS层一般存放的是原始数据,一般分区存放(按天),并压缩,之所以做这一层的目的是为了:使真实数据与统计数据解耦开.

(12). DWD建模思想

DWD层需要构建维度模型,一般采用星型模型.
维度建模一般按照以下四个步骤:
1. 选择业务过程: 选择有业务价格的业务线,比如:下单业务/支付业务/退款业务/物流业务,每一条业务线对应一张”事实表”.
2. 声明粒度: 是指数据仓库中保存数据的细化程度(注意:要尽可能的选择最小粒度),比如:订单和订单详细,建议选择订单的详细为粒度.
3. 确认维度: 确认业务事实与哪些维度表有关系(比如:时间/用户/优惠券/活动).
4. 确认事实: 确认事实表里的维度外键和度量值.

(13). DWS/DWT建模思想

DWS/DWT都是站在”维度表”的角度去看”事实表”,重点关注事实”聚合后的度量值”,例如:查看某一地区下单次数/查看某一地区下单总金额等等,所以,可以建一张宽表来存储这些字段(location_id/total_count/total_money),这样就不需要进行实时查询了.
DWS存放的是所有主题对象”当天汇总”行为,DWT存放的是所有主题对象”累积”行为.

(13). ADS建模思想

ADS层是根据业务的需求来决定存放哪些数据.