定义
Data warehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,它是一整套包括了etl、调度、建模在内的完整的理论体系。
数据仓库的方案建设的目的,是为前端查询和分析作为基础,主要应用于OLAP(on-line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。目前行业比较流行的有:AWS Redshift,Greenplum,Hive等。
数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备,这些准备包含:清洗、转义、分类、重组、合并、拆分、统计等
一、数仓分层
ODS:数据运营层(Operation Data Store ),也称为贴源层
存放原始数据,没有经过处理的,日志表、离线数据。
DWD:数据细节层(data warehouse details)
该层是业务层和数据仓库的隔离层,保持和ODS层一样的数据颗粒度,保证口径一致性;主要是对ODS数据层做一些数据的初步清洗和规范化的操作,比如去除空数据、脏数据、离群值等。
DWB:数据主题划分。
DWM:数据中间层(Data Warehouse Middle)
该层是在DWD层的数据基础上,对数据做一些轻微的聚合操作,生成一些列的中间结果表,提升公共指标的复用性,减少重复加工的工作。
简单来说,对通用的核心维度进行聚合操作,算出相应的统计指标。
DWS:数据服务层(Data Warehouse Service)
该层是基于DWM上的基础数据,整合汇总成分析某一个主题域的数据服务层,用于提供后续的业务查询,OLAP分析,数据分发等。一般来说,该层的数据表会相对较少;一张表会涵盖比较多的业务内容,有很多维度,计算指标,由于其字段较多,因此一般也会称该层的表为宽表。
ADS:数据应用层(Application Data Service)
该层主要是提供给数据产品和数据分析使用的数据,一般会存放在ES、Redis、PostgreSql等系统中供线上系统使用;也可能存放在hive或者Druid中,供数据分析和数据挖掘使用,比如常用的数据报表就是存在这里的。
DIM:维度表(Dimension Table)或维表
是与事实表相对应的一种表,它保存了维度的属性值,可以跟事实表做关联,相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。维度表主要是包含两个部分:
(1)高基数维度数据:一般是用户资料表、商品资料表类似的资料表,数据量可能是千万级或者上亿级别
(2)低基数维度数据:一般是配置表,比如枚举字段对应的中文含义,或者日期维表等;数据量可能就是个位数或者几千几万。
二、为什么分层
1、拆分计算逻辑,按照路径追踪数据,可溯源;
2、减少重复开发、有中间层的数据,可以复用计算结果;
三、数仓建模方式
范式建模:
关系型数据库,遵循第三范式3NF,数据冗余少,但效率低。
维度建模:
星型模型-以事实表为中心,所有维表连在事实表上,维表之间没有关联;(有冗余)
雪花模型-维表之间有关联;
星座模型-多个维表多个事实表关联;
四、数仓表设计
按照时间分区(天pdate、小时phour)、大类分区(pdev_big_type_cd)、上报方式6d7d(pdata_type)等等。
事实表:具有业务含义的、实际发生的、数据表。
①增量表:某时间段内有变化的上报数据,每次更新放到一个单独的分区中。
增量表适用于数据体量大、数据变更不大。
②全量表:每天更新所有的数据、不管是否变化都报,存到每天的分区中。
全量表适用数据量不很大的。
③拉链表:一个事务从开始到当前状态所有变化的信息,这张表有当前最新的状态和之前的历史数据。
拉链表适用于数据量大、但是变化少、但要统计状态,拉链表节省空间。
五、关于时间
1、如果是对历史数据的过滤,则分区采用t-1天
2、如果是对历史数据进行的聚合处理,分区采用t天